java 判断ip网段代码

 

package com.test;

public class IpTest {

	/**
	 * 判断IP是否在指定范围;
	 */
	boolean i;

	public static boolean ipIsValid(String ipSection, String ip) {
		if (ipSection == null)
			throw new NullPointerException("IP段不能为空!");
		if (ip == null)
			throw new NullPointerException("IP不能为空!");
		ipSection = ipSection.trim();
		ip = ip.trim();
		final String REGX_IP = "((25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)";
		final String REGX_IPB = REGX_IP + "\\-" + REGX_IP;
		if (!ipSection.matches(REGX_IPB) || !ip.matches(REGX_IP))
			return false;
		int idx = ipSection.indexOf('-');
		String[] sips = ipSection.substring(0, idx).split("\\.");
		String[] sipe = ipSection.substring(idx + 1).split("\\.");
		String[] sipt = ip.split("\\.");
		long ips = 0L, ipe = 0L, ipt = 0L;
		for (int i = 0; i < 4; ++i) {
			ips = ips << 8 | Integer.parseInt(sips[i]);
			ipe = ipe << 8 | Integer.parseInt(sipe[i]);
			ipt = ipt << 8 | Integer.parseInt(sipt[i]);
		}
		if (ips > ipe) {
			long t = ips;
			ips = ipe;
			ipe = t;
		}
		return ips <= ipt && ipt <= ipe;
	}

	public static void main(String[] args) {
		if (ipIsValid("102.168.1.1-192.168.1.100", "192.168.1.54")) {
			System.out.println("ip属于该网段");
		} else
			System.out.println("ip不属于该网段");
	}

}
可以使用Java的InetAddress类来判断IP地址是否在同一网段。以下是一个示例代码: ```java import java.net.InetAddress; import java.net.UnknownHostException; public class CheckIPv6InSameNetwork { public static void main(String[] args) { try { String ipv6Address = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"; String gatewayAddress = "2001:0db8:85a3:0000:0000:8a2e:0370:733f"; int maskLength = 64; InetAddress ipv6 = InetAddress.getByName(ipv6Address); InetAddress gateway = InetAddress.getByName(gatewayAddress); byte[] ipv6Bytes = ipv6.getAddress(); byte[] gatewayBytes = gateway.getAddress(); // 判断前缀是否相同 boolean isSamePrefix = true; for (int i = 0; i < maskLength / 8; i++) { if (ipv6Bytes[i] != gatewayBytes[i]) { isSamePrefix = false; break; } } if (isSamePrefix) { // 判断后缀是否相同 boolean isSameSuffix = true; for (int i = maskLength / 8; i < ipv6Bytes.length; i++) { if (ipv6Bytes[i] != gatewayBytes[i]) { isSameSuffix = false; break; } } if (isSameSuffix) { System.out.println("IPv6地址和网关在同一网段"); } else { System.out.println("IPv6地址和网关不在同一网段"); } } else { System.out.println("IPv6地址和网关不在同一网段"); } } catch (UnknownHostException e) { e.printStackTrace(); } } } ``` 在这个示例中,我们假设IPv6地址和网关地址都已经以字符串的形式给出,并且子网掩码的长度为64。首先,我们使用`InetAddress.getByName()`方法将字符串转换为`InetAddress`对象。然后,我们将IPv6地址和网关地址转换为字节数组,以便我们可以比较它们的前缀和后缀。最后,我们比较前缀和后缀以确定它们是否在同一网段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值