如何获得正确的IPv6 IP地址?

时间:2018-12-18 11:46:28

标签: android networking ipv6

我正在尝试在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地址。

1 个答案:

答案 0 :(得分:2)

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

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