代码之家  ›  专栏  ›  技术社区  ›  Vijayadhas Chandrasekaran

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

  •  0
  • Vijayadhas Chandrasekaran  · 技术社区  · 6 年前

    我试图在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 回复  |  直到 6 年前
        1
  •  2
  •   Sander Steffann    6 年前

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

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