java有效?? 识别有效的IP地址和掩码并进行分类统计

源码节点 发布于 08/07 14:04
阅读 298
收藏 0

解读下一代网络:算力网络正从理想照进现实!>>>

请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。

所有的IP地址划分为 A,B,C,D,E五类

A类地址1.0.0.0~126.255.255.255;

B类地址128.0.0.0~191.255.255.255;

C类地址192.0.0.0~223.255.255.255;

D类地址224.0.0.0~239.255.255.255;

E类地址240.0.0.0~255.255.255.255

 

私网IP范围是:

10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

 
子网掩码为二进制下前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
注意二进制下全是1或者全是0均为非法
 
注意:
1. 类似于【0.*.*.*】和【127.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时可以忽略
2. 私有IP地址和A,B,C,D,E类地址是不冲突的
加载中
0
名字无法识别
名字无法识别

ipv4地址转成long值,用long值确定范围

掩码转换成4个byte(255->0xFF),然后逐个byte与0x00同或,为0则直接下一个byte,不等于0xFF则继续右移一位(最多右移7次),为0且后面的byte都为0则合法,一直不为0则同样的方法判断下一个字节(其实我也不知道对不对)

0
前端大师傅
前端大师傅

1.用正则表达式把不合法的ip地址过滤出去。

(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)

2.写一个方法把Ip转为数字,如楼上所说。

public static String getNumConvertIp(long ipLong) {
        long mask[] = { 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 };
        long num = 0;
        StringBuffer ipInfo = new StringBuffer();
        for (int i = 0; i < 4; i++) {
            num = (ipLong & mask[i]) >> (i * 8);
            if (i > 0)
                ipInfo.insert(0, ".");
            ipInfo.insert(0, Long.toString(num, 10));
        }
        return ipInfo.toString();
    }
 public static long getIpConvertNum(String ipAddress) {
        String[] ip = ipAddress.split("\\.");
        long a = Integer.parseInt(ip[0]);
        long b = Integer.parseInt(ip[1]);
        long c = Integer.parseInt(ip[2]);
        long d = Integer.parseInt(ip[3]);

        long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
        return ipNum;
    }

3.调用方法把ip转为指定的数字比大小。

A类地址

将:1.0.0.0转为16777216  

将:126.255.255.255转为2130706431

将你输入的ip转为xxx

然后 if 16777216  < xxx && 2130706431>xxx就可以了

后面的B、C、D、E类地址依次类推。

返回顶部
顶部