一个好的Java网络数学库

14

我正在寻找一个专注于网络数学且已经测试过的Java库。没有特别花哨的东西,只是想要一个可以保存IP地址和子网掩码,并执行打印子网掩码或计算IP是否在给定子网中的操作。

我应该自己开发一个还是已经有一个强大的库可用?

3个回答

5

5

org.apache.lenya.ac.IPRange似乎具有以下功能。

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


org.apache.lenya.ac.IPRange可以被修改以满足我的需求,感谢您的回复。话虽如此,我希望能找到更通用的东西,比如Java中与Perl的IP::NetAddr相当的东西。 - Loren_

2

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接