Заставить InetAddress.getHostAddress() возвращать IPv4-адрес

Я использую библиотеку, которая использует java.net.InetAddress.getLocalHost().getHostAddress() для получения моего локального IP-адреса. Однако это всегда возвращает адрес IPv6 на моем компьютере (Gentoo Linux, JDK 1.6.0_37). Адрес далее используется в контексте, который не поддерживает адреса IPv6 и, следовательно, не работает.

Есть ли способ заставить getHostAddress() вернуть адрес IPv4 (например, через параметр для JVM)?


person Bob    schedule 11.01.2013    source источник
comment
Получить свой IP-адрес в java может быть полезно.   -  person mtk    schedule 11.01.2013
comment
Спасибо, но я не хочу менять свой исходный код, потому что вызов находится в библиотеке, которую я не хочу менять.   -  person Bob    schedule 11.01.2013


Ответы (1)


Вы можете настроить его на использование IPv4, когда он доступен. Конечно, адресов IPv6 намного больше, чем адресов IPv4, поэтому это, конечно, не гарантирует всегда получение адреса IPv4.

java.net.preferIPv4Stack = true

Любой набор с:

System.setProperty("java.net.preferIPv4Stack" , "true");

Или как аргумент командной строки:

-Djava.net.preferIPv4Stack=true

Тем не менее, предпочтение для адресов IPv4, как правило, является поведением по умолчанию.

Если вам нужно убедиться, что вы никогда не получите IPv6-адрес, я думаю, вам нужно проверить, что java.net.InetAddress.getLocalHost().getHostAddress() не возвращает Inet6Address, и обработать его, если это так (я полагаю, в качестве исключения).

Либо так, либо, конечно, лучше: исправить свой код для поддержки IPv6.

person femtoRgon    schedule 11.01.2013
comment
Какими будут тесты для обработки исключений, если возвращаемый адрес является ipv6? - person Hosni; 20.01.2014