我正在尝试使用Apache commons-net为IPV4从CIDR计算最后一个IP地址
SubnetUtils su = new SubnetUtils(cidr);
SubnetInfo si = su.getInfo();
si.getHighAddress();
它不适用于IPV6,有人可以建议一些库来解决这个问题吗?
答案 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