【问题标题】:Find IPv6 global scope address on Android device在 Android 设备上查找 IPv6 全局范围地址
【发布时间】:2015-09-24 06:35:51
【问题描述】:

我正在寻找一种方法来确定我的 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,因为数组的索引一直在变化并且从设备到设备。

感谢您的帮助。

【问题讨论】:

    标签: android ipv6


    【解决方案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 地址,您可以将它们用作传入或传出。

    【讨论】:

    • 感谢您的帮助。你能告诉我在哪里可以找到指示地址以 2 或 3 开头作为全局地址的文档吗?另外,如果我们确实有多个公共 IP,我们怎么知道哪一个用于 OUTGOING?我假设只有一个用于传出。谢谢。
    • 再次感谢您的帮助。我确实看到了单播地址的范围。现在我发现了两个非常相似的 ipv6 地址,分别是 2600:1010:b022:1349:d25c:f9bf:2881:d30c%3%32600:1010:8043"3aba:67ca:ac76:4a8f:dbdb%9%9。我查看了公共 ipv6 站点,它告诉我第一个是公共 ipv6 地址。我如何识别对方?
    • 我不完全确定您的 Android 版本或如何判断 Android 上正在使用哪个地址,但 Android 支持 Privacy Extensions.since 4.0 版。基本上,您会得到地址的随机接口(主机)ID,并且地址会定期更改。旧地址可能会保留一段时间。 RFC 4941 描述了隐私扩展:tools.ietf.org/html/rfc4941
    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 2019-07-13
    • 1970-01-01
    • 2014-07-14
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多