欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

判断子网掩码和ip地址的合法性[java]

程序员文章站 2022-05-20 08:04:43
...

判断子网掩码和ip地址的合法性[java]

子网掩码

子网掩码由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;
	}