android - 在 Android 设备上查找 IPv6 全局范围地址

标签 android ipv6

我正在寻找一种方法来确定我的 Android 设备上的全局 IPv6 地址以用于测试目的。现在,我已经从 Android API 获得了一个接口(interface)列表,代码如下:

NetworkInterface netInt: NetworkInterface.getNetworkInterfaces()

netInt 实际上包含设备上所有接口(interface)的列表。例如,您可以从以下列表中看到..(只是列表的一部分)

[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]

我使用一些公共(public) IPv6 站点并意识到我的公共(public) IPv6 地址是 2607:fb90:543:e9dd:e03:fac6:8232:95d6。我想看看是否有一种可靠的方法可以从数组中提取 2607:fb90:543:e9dd:e03:fac6:8232:95d6%7%7,因为数组的索引发生了变化一直在从设备到设备。

感谢您的帮助。

最佳答案

需要检查的是第一个地址字是4个字符,第一个字符是2或3。如果数组元素满足这两个条件,则它是一个全局地址。然后您可以清理周围的垃圾以获得有效地址。

注意:IPv6 允许将多个全局地址分配给一个接口(interface)。事实上,一些操作系统是为了安全而故意这样做的。

编辑: 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 允许接口(interface)上有任意数量的 IPv6 地址,您可以将它们用作传入或传出。

关于android - 在 Android 设备上查找 IPv6 全局范围地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257283/

相关文章:

java - Android Studio - 在每个应用程序重新编译时重新编译java模块

android - 如何在 android 中重新构建 HAL?

android - 自动接受所有 SDK 许可

c# - 带有 IPv6 地址的 Socket.Connect 引发 "Address Family Not supported"错误

win7 上的 WCF Duplex net.tcp 问题

c++ - 将 IPv4 客户端连接到 IPv6 服务器 : connection refused

android - 在屏幕墙上播放和分割视频

android - 在android中使用AESCrypt加密和解密

c++ - getaddrinfo() 只返回::1 作为 IPV6 地址,

linux - 确定适配器的首选 IPv6 源地址