【问题标题】:How Global Unicast Addresses work for IPv6 on android devices全球单播地址如何在 Android 设备上用于 IPv6
【发布时间】:2015-09-26 22:36:40
【问题描述】:

我正在开发一个 android 应用程序,我需要在不发出任何网络请求的情况下为 android 设备查找全球单播地址。 (如果我们可以发出网络请求,那应该很容易,因为我们可以在标头中看到向外的公共 ipv6)。我想看看在我们发出网络请求之前如何找到单播地址。

我已使用 API 从所有接口检索所有可能的 IPv6。然后我关注属于2000::/3 范围的IP。但是,有时我只得到一个 IPv6(这是正确的答案),有时我在 2000::/3 范围内得到两个/多个地址。我认为这种情况可能是由网络状态变化引起的,但我不确定。

例如:API 向我返回以下两个 IPv6

2600:1010:b022:1349:d25c:f9bf:2881:d30c%3%32600:1010:8043"3aba:67ca:ac76:4a8f:dbdb%9%9

谁能告诉我全球单播 IPv6 如何在安卓设备上工作?如何确保我得到的是真正的 IPv6 而不是临时的?

【问题讨论】:

    标签: android networking ipv6 ipv4


    【解决方案1】:

    使用隐私扩展,临时地址是世界其他地方通常使用的地址。它会定期更改以防止任何人将您的地址与您关联。隐私扩展的实现方式取决于操作系统,但一般来说,您会在一段时间内获得一个临时地址,然后更改为新的临时地址,旧的临时地址仍然可用,但在它消失之前会被弃用一段时间。真实地址不会改变,但通常不会在其他设备看到的地方使用。此行为取决于操作系统,因此您的里程可能会有所不同。

    您问题的真正答案取决于您打算如何处理该地址。您可能真的想要临时地址而不是 DHCP 或 SLAAC 分配的地址,但您必须意识到它会改变。

    另外,地址中的%3%3%9%9 并不是IPv6 地址的一部分;它们是分配地址的接口的指示符。 (链路本地地址需要这个,因为链路本地地址在多个接口上可能相同。)我不确定,但您可能正在查看两个完全不同的接口(连接到不同来源,如 Wi-Fi,以及蜂窝,还是两个不同的蜂窝塔?)。

    【讨论】:

    • 我获取 IPv6 的原因是从某个设备跟踪某个用户。(就像我们在 IPv4 中所做的那样)。我知道这在某种程度上违反了隐私扩展。作为谷歌论坛中的一些主题,他们确实提到了隐私分机。在 android 4 之后默认启用。在这种情况下,我不关心区域 id,因为我最终会删除它们。
    • @Chi,事实证明,不仅在 Android 4+ 上默认启用隐私扩展,而且显然您甚至无法禁用它:code.google.com/p/android/issues/detail?id=31102。这将使您想做的事情变得更加困难,但是您可以通过 MAC 地址找出永久地址。
    【解决方案2】:

    全球单播 IPv6 地址应使用 DHCPv6 或由 IPv6 路由器发送的路由器广告发布的网络前缀在无状态地址自动配置中生成(在这种情况下,它应由网络前缀和接口 MAC 地址组成)。请参阅http://www.slideshare.net/rodolk/networking-tcpip-stack-introduction-ipv6,幻灯片 98 了解更多信息。

    【讨论】:

    • 无论如何分配 IPv6 地址,如果启用隐私扩展(RFC 4941,tools.ietf.org/html/rfc4941),世界其他地方看到的地址将定期更改。我相信 OP 正在寻找其他设备将看到的地址 (stackoverflow.com/questions/31257283/…)。 Privacy Extensions 专门设计用于使 IPv6 地址与特定设备相关联变得困难。隐私扩展在 Android 4.0 及更高版本上启用。
    猜你喜欢
    • 2015-09-24
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2022-08-05
    • 2010-11-17
    相关资源
    最近更新 更多