用于检查IPv4或IPv6地址是否在给定子网中的Java库

Jan*_*n H 13 java ipv4 ipv6 subnet

我可以用什么库来检查IP地址是否在给定的子网中?我可以找到像Apache Commons SubnetUtils(SubnetUtils.SubnetInfo.isInRange)这样的库,但是许多库还不支持IPv6.

Jan*_*n H 8

edazdarevic的CIDRUtils支持IPv4和IPv6.该示例未提及boolean isInRange(String ipAddress),但它已实现!

另一种选择是java-ipv6,但它不支持IPv4并且需要JDK7.


Omi*_*mid 5

使用Spring的IpAddressMatcher.与Apache Commons Net不同,它支持ipv4和ipv6.

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);
}
Run Code Online (Sandbox Code Playgroud)