我正在寻找一个面向网络数学并且已经过测试的 Java 库。没有什么特别花哨的东西,只是保存 ips 和子网,并执行诸如打印子网掩码或计算 IP 是否在给定子网内之类的事情。
我应该自己推出,还是已经有一个强大的库来解决这个问题?
我正在寻找一个面向网络数学并且已经过测试的 Java 库。没有什么特别花哨的东西,只是保存 ips 和子网,并执行诸如打印子网掩码或计算 IP 是否在给定子网内之类的事情。
我应该自己推出,还是已经有一个强大的库来解决这个问题?
org.apache.lenya.ac.IPRange似乎具有这些功能。
Apache Lenya 项目是一个开源内容管理系统。它使用 Apache 许可证,因此您可以仅重用您需要的代码。(但一如既往,请自己阅读许可证;不要相信互联网上某些人的法律建议!:-)
我们自己开发了一个 Java IPv4 算术库。在这里看到它:http: //tufar.com/ipcalculator/ 它是在 BSD 许可下。
开源 IPAddress Java 库可以进行 IP 地址操作,例如与 ipv4/ipv6 的转换和子网检查。免责声明:我是项目经理。
它处理各种网络数学运算,例如屏蔽、按位或、设置前缀长度、将地址切换到前缀块、遍历子网、检查包含、替换地址段、反转地址、计算子网交集、从另一个子网中减去一个子网,以及其他。
下面是一些用于测试 ipv6 地址是否在给定子网中的示例代码:
String ipv6 = "2001:db8:57AB:0000:0000:0000:0000:0001";
String ipv6subnet = "2001:db8::/32";
String ipv4 = "1.2.3.4";
try {
IPAddressString ipv6addrstr = new IPAddressString(ipv6);
IPAddressString ipv6addrsubnetstr = new IPAddressString(ipv6subnet);
IPAddressString ipv4addrstr = new IPAddressString(ipv4);
IPAddress ipv6addr = ipv6addrstr.toAddress();
IPAddress ipv6addrsubnet = ipv6addrsubnetstr.toAddress();
IPAddress ipv4mappedaddr = ipv4addrstr.toAddress().toIPv6();
System.out.println(ipv6addrsubnet + " contains " + ipv6addr + ": " + ipv6addrsubnet.contains(ipv6addr)); //
System.out.println(ipv6addrsubnet + " contains " + ipv4mappedaddr + ": " + ipv6addrsubnet.contains(ipv4mappedaddr)); //
} catch(AddressStringException e) {
//e.getMessage has validation error
}
输出:
2001:db8::/32 contains 2001:db8:57ab::1 is true
2001:db8::/32 contains ::ffff:102:304 is false