我正在寻找一个面向网络数学并已经过测试的Java库。没有什么特别的花哨,只需要保存ips和子网,并执行打印子网掩码或计算IP是否在给定子网内的操作。
我应该自己动手,还是已经有一个强大的库?
答案 0 :(得分:5)
我们自己开发了一个Java IPv4算术库。 在此处查看:http://tufar.com/ipcalculator/ 它是BSD许可证。
答案 1 :(得分:4)
org.apache.lenya.ac.IPRange似乎有这些功能。
Apache Lenya项目是一个开源内容管理系统。它使用Apache许可证,因此您可以只重用所需的代码。 (但一如既往,请自己阅读license;不要相信互联网上某些人的法律建议!: - )
答案 2 :(得分:0)
open-source IPAddress Java library可以进行IP地址操作,例如转换为/从ipv4 / ipv6和子网检查。免责声明:我是项目经理。
它处理各种网络数学运算,例如屏蔽,按位或设置前缀长度,切换地址到前缀块,迭代子网,检查包含,替换地址段,反转地址,计算子网交集,从中减去一个子网另一个和其他人。
以下是一些用于测试ipv6地址是否在给定子网中的示例代码:
line item order_quantity intial_stock Remaining_Stock
1 123 5 10 5
2 123 3 10 2
3 123 1 10 1
4 234 5 15 10
5 234 3 15 7
6 234 1 15 6
输出:
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
}