Что делает статический InetAddress.getLoopbackAddress () вернуться?

Java 7 добавляет новый статический метод в класс java.net.InetAddress:

static InetAddress getLoopbackAddress()
Returns the loopback address.

теперь мне интересно, какой адрес будет содержаться в результате, IP4 или IP6.

на документация немного туманно на эту тему:

InetAddress возвратился представляют петлевой адрес IPv4 127.0.0.1 или петлевой адрес IPv6 ::1. Петлевой адрес IPv4 вернулся лишь один из многих в форме 127...*

как Java решает, следует ли возвращать 127.0.0.1 или кулон IPv6 ::1?

или они оба представлены одним и тем же объектом InetAdress?

результат всегда одинаков? Зависит ли это от моей сетевой карты(ов)?

3 ответов


во-первых, существует фундаментальная разница между .getLocalHost() и этот метод: .getLocalHost() получит адрес, зарегистрированный в имя компьютера, а .getLoopbackAddress() вернет только локальный, петлевой адрес.

Что касается возвращаемого адреса, он зависит от ОС. Однако вы можете повлиять на JVM для использования IPv4 в приоритете, передав -Djava.net.preferIPv4Stack=true к аргументам JVM или с помощью:

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

Я считаю, что другие ответы, приведенные здесь, неверны.

Java, по умолчанию,предпочитает стек IPv6 (если имеется), но предпочитает IPv4-адреса. Обратите внимание на тонкую разницу. Это контролируется java.net.preferIPv4Stack и java.net.preferIPv6Addresses свойства системы, которые по умолчанию в false.

отсюда InetAddress.getLoopbackAddress() почти всегда возвращает IPv4-адрес. Вам придется установить java.net.preferIPv6Addresses свойства системы true чтобы заставить его вернуть IPv6 адрес.

Я не вижу никакой зависимости ОС для результата этого метода в источниках JDK. Я не могу придумать ОС, где Java не будет (с настройками по умолчанию) возвращать IPv4-адрес для этого метода.


Если у вас есть стек IPv6, и Java не настроен на предпочтение IPv4, он вернет ::1.

в противном случае он будет возвращать 127.0.0.1.