Java判断一个ip格式的字符串是否属于某个ip段
时间: 2024-10-17 09:10:38 浏览: 14
在Java中,你可以使用正则表达式以及网络地址的比较来判断一个IP格式的字符串是否属于某个IP段。首先,你需要验证输入的字符串是否是有效的IPv4或IPv6地址。然后,可以将这个地址转换成二进制形式,以便于比较。
以下是一个简单的示例,假设我们有一个起始IP和结束IP:
```java
import java.net.InetAddress;
import java.util.regex.Pattern;
public class IpRangeCheck {
private static final Pattern IPV4_PATTERN = Pattern.compile("\\b(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\b");
private static final Pattern IPV6_PATTERN = Pattern.compile("\\b([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\\b");
public boolean isInRange(String ipAddress, String startIp, String endIp) {
if (isIPv4(ipAddress) && isIPv4(startIp) && isIPv4(endIp)) {
return compareIPv4(ipAddress, startIp, endIp);
} else if (isIPv6(ipAddress) && isIPv6(startIp) && isIPv6(endIp)) {
return compareIPv6(ipAddress, startIp, endIp);
}
return false;
}
private boolean isIPv4(String ip) {
return IPV4_PATTERN.matcher(ip).matches();
}
private boolean isIPv6(String ip) {
return IPV6_PATTERN.matcher(ip).matches();
}
// IPv4比较逻辑,这里简化处理,实际应用中可能需要更复杂计算
private boolean compareIPv4(String ipAddress, String startIp, String endIp) {
try {
InetAddress iaStart = InetAddress.getByName(startIp);
InetAddress iaEnd = InetAddress.getByName(endIp);
InetAddress iaTest = InetAddress.getByName(ipAddress);
long lStart = iaStart.getAddress()[3] << 24 | iaStart.getAddress()[2] << 16 | iaStart.getAddress()[1] << 8 | iaStart.getAddress()[0];
long lEnd = iaEnd.getAddress()[3] << 24 | iaEnd.getAddress()[2] << 16 | iaEnd.getAddress()[1] << 8 | iaEnd.getAddress()[0];
long lTest = iaTest.getAddress()[3] << 24 | iaTest.getAddress()[2] << 16 | iaTest.getAddress()[1] << 8 | iaTest.getAddress()[0];
return lTest >= lStart && lTest <= lEnd;
} catch (Exception e) {
throw new RuntimeException("Invalid IP address", e);
}
}
// IPv6比较逻辑,同样简化处理,实际应用中可能需要库函数如Inet6Address::compareTo()
private boolean compareIPv6(String ipAddress, String startIp, String endIp) {
// 省略IPv6比较逻辑,因为涉及到复杂的字节操作和解析,建议使用专门的库函数完成
// 实际代码会先解析为Inet6Address对象,然后比较它们的地址
return false; // 这里返回false,表示IPv6支持未实现
}
}
```
阅读全文