Java IPV6前缀长度计算

Java IPV6前缀长度计算,java,ip,ipv6,Java,Ip,Ipv6,我想计算给定IP地址的前缀长度。我拿了 作为参考。 我的Java代码是基于冒号进行拆分的:并以16为单位相互拆分。 但我不确定这是否正确。请告诉我计算IPV6地址前缀长度的正确方法。 代码如下 System.out.println("IPV6 Length ==> " + ""+ipv6.split(":").length*16); 不能仅从地址确定前缀长度。例如,所有这些前缀都是有效的: 2001:db8::/32 2001:db8::/30 2001:db8::/64 2001

我想计算给定IP地址的前缀长度。我拿了 作为参考。 我的Java代码是基于冒号进行拆分的:并以16为单位相互拆分。 但我不确定这是否正确。请告诉我计算IPV6地址前缀长度的正确方法。 代码如下

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

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

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

正如您所见,您确实需要显式指定前缀长度