判断子网掩码和ip地址的合法性[java]
程序员文章站
2022-05-20 08:04:43
...
子网掩码
子网掩码由4段构成,比如255.255.255.0
每一数字都可以转化为8位二进制数字,一共32位
比如 255.255.255.0 可以化为
11111111 11111111 11111111 00000000
子网掩码如果想合法,则需要满足:二进制数前面都是1,后面都是0。同时每一个数字是不可以大于255的。因为大于255,二进制数就会超过8位。
255.255.255.0就是一个合法的子网掩码,因为其前24位是1,后8位都是0。
255.255.255.32就不是一个合法的子网掩码,其转化成二进制数为
11111111 11111111 11111111 00100000
如果子网掩码不满足前面都是1后面都是0,则不是一个合法的子网掩码。
都是1,或者都是0,同样不合法。
代码如下
public static boolean isMask(String mask){
String[] split = mask.split("\\.");
StringBuilder sb = new StringBuilder();
for (String s : split) {
if(s.trim().equals("")){
return false;
}
int i = Integer.parseInt(s);
//如果有数字大于255,则直接返回false
if (i > 255) {
return false;
}
String binary = Integer.toBinaryString(i);
//如果长度小于8,则在前面补0
while (binary.length() < 8) {
binary = "0".concat(binary);
}
sb.append(binary);
}
//32位二进制数中需要同时存在0和1,且不存在01
return sb.toString().contains("1") && sb.toString().contains("0") && !sb.toString().contains("01");
}
判断IP合法性
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
0.x.x.x和127.x.x.x的IP地址不属于上述输入的任意一类,也不属于不合法ip地址。
代码如下
public static String tellIpType(String ip) {
String[] split = ip.split("\\.");
//如果后三个数字有大于255的,则属于非法ip
for (int c = 1; c < split.length; c++) {
if (split[c].trim().equals("") || Integer.parseInt(split[c]) > 255) {
return "illegalIp";
}
}
//如果是0开头与127开头的,则返回一个null
if (split[0].equals("0") || split[0].equals("127")) {
return null;
}
int type = Integer.parseInt(split[0]);
//区分A,B,C,D,E类IP
if (type >= 1 && type <= 126) {
return "A";
} else if (type >= 128 && type <= 191) {
return "B";
} else if (type >= 192 && type <= 223) {
return "C";
} else if (type >= 224 && type <= 239) {
return "D";
} else if (type >= 240 && type <= 255) {
return "E";
} else {
return "illegalIp";
}
}
判断私有IP
私网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
代码如下
public static boolean isPrivate(String ip){
String[] split = ip.split("\\.");
int i0 = Integer.parseInt(split[0]);
int i1 = Integer.parseInt(split[1]);
int i2 = Integer.parseInt(split[2]);
int i3 = Integer.parseInt(split[3]);
if(i0==10&&(i1>=0&&i1<=255)&&(i2>=0&&i2<=255)&&(i3>=0&&i3<=255)){
return true;
}
if(i0==172&&(i1>=16&&i1<=31)&&(i2>=0&&i2<=255)&&(i3>=0&&i3<=255)){
return true;
}
if(i0==192&&i1==168&&(i2>=0&&i2<=255)&&(i3>=0&&i3<=255)){
return true;
}
return false;
}