Java 检查 IPv4 或 IPv6 地址是否位于给定子网中 [已关闭]

2022-09-04 02:40:08

如何检查 IP 地址是否位于给定子网中?我能够通过使用Apache Commons SubnetUtils(SubnetUtils.SubnetInfo.isInRange)来做到这一点,但它还不支持IPv6。


答案 1

edazdarevic的CIDRUtils同时支持IPv4和IPv6。该示例没有提到布尔值 isInRange(String ipAddress),但它已实现!

另一个选项是java-ipv6,但它不支持IPv4,需要JDK7


答案 2

使用 的 IpAddressMatcher。与Apache Commons Net不同,它同时支持ipv4和ipv6。spring-security-web

import org.springframework.security.web.util.matcher.IpAddressMatcher;
...

private void checkIpMatch() {
    matches("192.168.2.1", "192.168.2.1"); // true
    matches("192.168.2.1", "192.168.2.0/32"); // false
    matches("192.168.2.5", "192.168.2.0/24"); // true
    matches("92.168.2.1", "fe80:0:0:0:0:0:c0a8:1/120"); // false
    matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/120"); // true
    matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/128"); // false
    matches("fe80:0:0:0:0:0:c0a8:11", "192.168.2.0/32"); // false
}

private boolean matches(String ip, String subnet) {
    IpAddressMatcher ipAddressMatcher = new IpAddressMatcher(subnet);
    return ipAddressMatcher.matches(ip);
}

言论

如果你不愿意在你的项目中加入Spring,看看我的另一个答案,在这里


推荐