14

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

我应该自己推出,还是已经有一个强大的库来解决这个问题?

4

3 回答 3

5

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

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

于 2008-10-20T23:15:39.910 回答
5

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

于 2010-02-12T11:01:34.590 回答
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
于 2018-01-11T22:23:39.900 回答