IPV6前缀长度计算

时间:2014-02-13 09:35:29

标签: java ip ipv6

我想计算给定IP地址的前缀长度。我拿了 http://escapedrabbit.com/?p=62作为参考。 我的Java代码是基于冒号进行拆分:并且多次使用16进行拆分。 但我不确定这是否正确。请给我发布计算IPV6地址前缀长度的正确方法。 代码

  System.out.println("IPV6 Length  ==> " + ""+ipv6.split(":").length*16);

1 个答案:

答案 0 :(得分:2)

您无法仅从地址确定前缀长度。例如,所有这些前缀都是有效的:

2001:db8::/32
2001:db8::/30
2001:db8::/64
2001:db8:1:b::/64

地址中:的数量不会告诉您有关前缀长度的任何信息。以下是用不同(但也完全有效)的表示法编写的相同前缀:

2001:db8:0:0:0:0:0:0/32
2001:db8:0:0:0:0:0:0/30
2001:db8:0:0:0:0:0:0/64
2001:db8:1:b:0:0:0:0/64

此外,前缀长度取决于您要查找的位置。我们来看看我自己的IPv6地址。 ISP有2a00:8640::/29,代理2a00:8640:0001::/48给我,我把2a00:8640:0001:0000::/64放在家里的局域网上,而我的电脑有地址2a00:8640:0001:0000:3528:2df9:b368:e9e9

我的电脑有这样的配置:2a00:8640:0001:0000:3528:2df9:b368:e9e9/64,它指定子网2a00:8640:0001:0000::/64中的地址(更准确地写为2a00:8640:1::/64)。

如您所见,您确实需要明确指定的前缀长度。