【问题标题】:How to get correct IPv6 Ip address?如何获得正确的 IPv6 IP 地址?
【发布时间】:2019-05-18 19:55:32
【问题描述】:

我正在尝试在 android 中显示已连接网络的 IP 地址。我正在使用以下代码。但它返回 2 个 IPv6 ip 地址。如何从中找到正确的IP地址?

我正在使用以下代码:

List<LinkAddress> linkAddresses = connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getLinkAddresses();
        for (LinkAddress linkAddress : linkAddresses) {
            Log.i("","LinkAddress getAddress "+linkAddress.getAddress() + "");
            Log.i("","Is IPV6 " + (linkAddress.getAddress() instanceof Inet6Address) +"");
            Log.i("","Is IPV4 " + (linkAddress.getAddress() instanceof Inet4Address) +"");
            Log.i("","Is isLinkLocalAddress " + (linkAddress.getAddress().isLinkLocalAddress()) +"");
            Log.i("","Is not isLoopbackAddress " + (!linkAddress.getAddress().isLoopbackAddress()) +"");
        }

现在我得到了 4 个 IP 地址。

LinkAddress getAddress /fe80::2d0:caff:fe00:5ad6
LinkAddress getAddress /2401:4900:2305:14e:2d0:caff:fe00:5ad6
LinkAddress getAddress /2401:4900:2305:14e:28e2:5192:e38f:3e9
LinkAddress getAddress /192.168.43.176

我可以识别 fe80 是链接本地 IP 地址,而 192. 是 IPv4 地址。但我很困惑从中识别 IPV6 地址。请帮我找出 IPv6 的 IP 地址。

【问题讨论】:

  • 那里有三个 IPv6 地址,而不是两个。这三个都是正确的。使用哪一个取决于您在做什么。

标签: android networking ipv6


【解决方案1】:

两个 IPv6 地址均有效。每个接口有多个地址是正常的。两者都在同一个子网中 (2401:4900:2305:14e::/64)。当您查看接口 ID(地址的后半部分)时,您会看到中间有 ..ff:fe..。这表明该地址可能来自接口的 MAC 地址。另一个地址是临时地址,会随着时间的推移而改变,以保护用户的隐私。

但简而言之:两个地址都是完全有效且可用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 2016-01-21
    • 2012-07-19
    • 2022-01-21
    • 1970-01-01
    • 2011-06-09
    • 2013-07-02
    相关资源
    最近更新 更多