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

Java实现IP与子网掩码合法性判断
本文介绍了如何使用Java判断子网掩码的合法性,规定子网掩码必须满足前部分为1,后部分为0,且每个十进制数不超过255。同时,文章还涉及了IP地址的合法性检查,包括A、B、C、D、E五类IP地址的范围,并明确了0.x.x.x和127.x.x.x的特殊性。最后,讲解了如何判断私有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这三个范围内。" 85636038,1511119,Kafka与RabbitMQ:原理、应用场景及对比分析,"['消息队列', 'Kafka', 'RabbitMQ', '分布式系统', '数据处理']
部署运行你感兴趣的模型镜像

判断子网掩码和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;
	}

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值