我正在尝试使用用于IPV4的Apache commons-net从CIDR计算最后一个IP地址
SubnetUtils su = new SubnetUtils(cidr);
SubnetInfo si = su.getInfo();
si.getHighAddress();
不适用于IPV6,有人可以建议一些库来解决此问题吗?
通常,IPv6子网将是一个/64
(对此有很少的例外,其他子网大小可能会破坏某些内容)。由于IPv6甚至没有广播概念,因此子网中的最后一个地址将以ffff:ffff:ffff:ffff
作为最后64位。 IPv6也可以使用子网中的第一个(0000:0000:0000:0000
)地址。由于子网中的每个地址都是有效地址,因此它比IPv4容易得多。
[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