我正在尝试在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地址。
答案 0 :(得分:2)
两个IPv6地址均有效。每个接口有多个地址是正常的。两者都在同一个子网(2401:4900:2305:14e :: // 64)中。当您查看接口ID(地址的后半部分)时,您会看到中间有..ff:fe..。这表明该地址可能是从接口的MAC地址派生的。另一个地址是一个临时地址,该地址会随着时间的推移而变化,以保护用户的隐私。
但是简而言之:两个地址都完全有效且可用。