一个很好的网络数学Java库

我正在寻找一个面向网络数学并已经过测试的Java库。 没有什么特别的花哨,只需要保存ips和子网,并执行打印子网掩码或计算IP是否在给定子网内的操作。

我应该自己滚动,还是已经有一个强大的库?

我们自己开发了一个Java IPv4算术库。 在这里查看: http : //tufar.com/ipcalculator/它是在BSD许可下。

org.apache.lenya.ac.IPRange似乎具有这些function。

Apache Lenya项目是一个开源内容管理系统。 它使用Apache许可证,因此您可以只重用所需的代码。 (但一如既往,请自行阅读许可证 ;不要相信互联网上某些人的法律建议!:-)

开源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