如何在IPV6中计算CIDR的最后一个IP地址

时间:2016-03-14 12:52:05

标签: java ipv6 apache-commons subnet apache-commons-net

我正在尝试使用Apache commons-net为IPV4从CIDR计算最后一个IP地址

SubnetUtils su = new SubnetUtils(cidr);
SubnetInfo si = su.getInfo();
si.getHighAddress();

它不适用于IPV6,有人可以建议一些库来解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

通常,IPv6子网将是/64(除此之外的例外情况很少,其他子网大小可能会破坏)。由于IPv6甚至没有广播概念,因此子网中的最后一个地址将以ffff:ffff:ffff:ffff作为最后64位。 IPv6还可以使用子网中的第一个(0000:0000:0000:0000)地址。这使得它比IPv4更容易,因为子网中的每个地址都是有效的地址。

答案 1 :(得分:1)

The IPAddress Java library可以做你在这里描述的内容。

对于任何给定的CIDR字符串,无论是IPv4(如1.2.3.4/16)还是IPv6(如1:2:3:4 :: / 64),都可以执行以下操作:

IPAddressString string = new IPAddressString("1:2:3:4::/64");
IPAddress subnet = string.getAddress();
IPAddress highest = subnet.getHighest();
String highestString = highest.toCanonicalString();
System.out.println(highestString);

对于1:2:3:4 :: / 64,上述代码的输出为1:2:3:4:ffff:ffff:ffff:ffff