Как получить правильный IP-адрес IPv6? - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь отобразить IP-адрес подключенных сетей в Android.Я использую следующий код.Но он возвращает 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 из этого.Пожалуйста, помогите мне узнать IP-адрес IPv6.

1 Ответ

0 голосов
/ 18 декабря 2018

Оба IPv6-адреса действительны.Нормально иметь несколько адресов на интерфейс.Оба находятся в одной подсети (2401: 4900: 2305: 14e :: / 64).Когда вы посмотрите на идентификатор интерфейса (вторая половина адреса), вы увидите, что у него есть ..ff: fe .. в середине.Это признак того, что этот адрес, вероятно, получен из MAC-адреса интерфейса.Другой адрес - это временный адрес, который со временем изменится для защиты конфиденциальности пользователя.

Но вкратце: оба адреса полностью действительны и пригодны для использования.

...