我正在寻找一种方法来确定我的Android设备上的全局IPv6地址以进行测试。现在,我从Android API获得了一个接口列表,如下代码所示:
NetworkInterface netInt: NetworkInterface.getNetworkInterfaces()
netInt
实际上包含设备上所有接口的列表。例如,您可以从以下列表中看到..(只是列表的一部分)
[dummy0][2][/fe80::d878:d9ff:fe94:eeae%dummy0%2]
[rmnet_data0][7][/fe80::e03:fac6:8232:95d6%rmnet_data0%7]
[/2607:fb90:543:e9dd:e03:fac6:8232:95d6%7%7]
我使用了一些公共IPv6站点并意识到我的公共IPv6地址是2607:fb90:543:e9dd:e03:fac6:8232:95d6
。我想看看是否有一种可靠的方法从数组中提取2607:fb90:543:e9dd:e03:fac6:8232:95d6%7%7
,因为数组的索引一直在变化,从设备变为设备。
感谢您的帮助。
答案 0 :(得分:1)
您需要检查的是第一个地址字是4个字符,第一个字符是2或3.如果数组元素符合这两个条件,则它是一个全局地址。然后,您可以清理周围的垃圾以获得有效的地址。
注意:IPv6允许将多个全局地址分配给接口。事实上,一些操作系统是出于安全目的而这样做的。
修改强>
IPv6全球单播地址的定义为2000::/3
。这会产生2000::
到3ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
。请参阅:IPv6 Global Unicast Address Assignments
Note
The assignable Global Unicast Address space is defined in [RFC4291] as
being the address block defined by the prefix 2000::/3. All address
space in this block not listed in the table below is reserved by IANA
for future allocation.
IPv6允许接口上的任意数量的IPv6地址,您可以将它们用作传入或传出。