一个好的网络数学Java库
问题描述:
我正在寻找一个面向网络数学并已经过测试的Java库。没有什么特别花哨的东西,只是用来存储ips和子网,并且执行诸如打印子网掩码或计算IP是否位于给定子网内的东西。一个好的网络数学Java库
我应该推出自己的,还是已经有一个强大的库?
答
org.apache.lenya.ac.IPRange似乎具有这些功能。
Apache Lenya项目是一个开源内容管理系统。它使用Apache许可证,所以你可能只能重用你需要的代码。 (但是,一如既往,请自己阅读license;不要相信互联网上某个人的法律建议!:-)
答
open-source IPAddress Java library可以做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
org.apache.lenya.ac.IPRange当然可以进行修改,以满足我的需求,谢谢你的回应。也就是说,我希望能找到更通用的东西,比如Perl的IP :: NetAddr。 – perilandmishap 2008-10-23 18:43:29