2013-12-06 3 views
0

Я использовал класс NetworkInterface для определения IP-адресов, но хотя устройство только включено в режиме IPv4, я получаю адреса IPv6, а также адреса IPv4 с сетевого интерфейса, так как маршрутизатор также назначает адрес IPv6. Есть ли способ программно определить, включено ли устройство Android для IPv6 или нет?Есть ли способ программно определить, включено ли устройство Android для IPv6 или нет?

+1

dublicate: http://stackoverflow.com/a/10143152/995320 – bbuecherl

+0

Я уже пробовал это. он также дает мне адреса IPv6 на моем устройстве, хотя мое устройство не поддерживает IPv6, поскольку маршрутизатор назначает поддельные адреса ipv6 в локальной сети. Я хочу найти способ, который говорит мне, поддерживает ли устройство или нет. – user3075308

+0

Может ли это означать, что устройство поддерживает его, но на самом деле это сеть, которая этого не делает? О чём вы действительно хотите знать - само устройство или устройство в его текущей сетевой экосистеме? –

ответ

0

Это зависит от того, что вы подразумеваете под «включенным». Если интерфейс имеет адрес IPv6, для которого Inet6Address.isSiteLocal(), .isLinkLocal() и .isLoopback() возвращает false, тогда устройство считает, что у него есть восходящий маршрутизатор на этом интерфейсе, и этот маршрутизатор считает, что есть подключение к общей сети. Конечно, оба могут ошибаться, но они думают, что они думают. Это примерно то, что вы подразумеваете под включенным?

+0

Это будет работать, только если устройство * подключено к сети ipv6 в данный момент *? – joaonlima

+0

Строго говоря, он проверяет, подключено ли устройство к маршрутизатору, который утверждает, что он подключен к миру IPv6. Возможно, этот маршрутизатор ошибочен. Если вы хотите узнать, поддерживает ли Android-устройство какую-либо поддержку v6, независимо от того, сможет ли он подключиться к другим устройствам v6, вы можете выполнять итерацию по сетевым интерфейсам и проверить, есть ли у них какие-либо Inet6Address-es. Я не могу протестировать (иметь только v6-совместимые сети), но я ожидаю, что интерфейс loopback будет иметь адрес v6, даже если другие интерфейсы этого не делают. – arnt

Смежные вопросы