2014-02-13 245 views
0

我想计算给定IP地址的前缀长度。我参考了 http://escapedrabbit.com/?p=62作为参考。 我的Java代码是基于冒号分割的:并且由16个跳转。 但我不确定这是否正确。请张贴我计算IPV6地址前缀长度的正确方法。 以下代码IPV6前缀长度计算

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

回答

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放在我家的LAN上,而我的PC有地址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)中的地址。

正如你所看到的你确实需要一个明确指定的前缀长度。