栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

子网掩码

子网掩码由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;
	}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322821.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号