Различные IP-адреса от getLocalHost и getByName("localhost").. почему так?

Почему когда InetAddress.getLocalHost().getHostAddress возвращает другой результат, чем InetAddress.getByName("localhost")

Почему они оба не возвращаются одинаково? один возвращается 192.168.0.2 тогда как другой возвращается 127.0.0.1

2 ответа

Кажется, InetAddress.getLocalHost().getHostAddress() возвращает системный IP-адрес, а InetAddress.getByName("localhost") адрес обратной петли.

Я сомневаюсь, что случай с менеджером безопасности, описанный Parthian для getByName,
Согласно спецификации API InetAddress для getByName(): http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html

Метод throws: SecurityException - если менеджер безопасности существует, и его метод checkConnect не разрешает операцию.

в то время как getLocalHost () не выдает такого исключения, но возвращает адрес обратной связи как отказоустойчивый. http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html

getByName() должен подключиться к DNS для разрешения имени хоста. getByName() в этом случае разрешает localhost из /etc/hosts(linux) или C:\Windows\System32\drivers\etc (windows). Пара ip имени хоста настраивается пользователем в этих файлах. Чтобы проверить, вы можете предоставить любое значение localhost, например: localhost 127.0.0.2 в файле hosts, и getByName вернет его.

Согласно этому:

"[InetAddress.getLocalHost()] Возвращает адрес локального хоста. Это достигается путем извлечения имени хоста из системы, а затем преобразования этого имени в InetAddress. Примечание. Разрешенный адрес может кэшироваться в течение короткого периода времени.

Если есть менеджер безопасности, его метод checkConnect вызывается с локальным именем хоста и -1 в качестве аргументов, чтобы увидеть, разрешена ли операция. Если операция не разрешена, возвращается InetAddress, представляющий адрес обратной связи."

Вероятно, произошло то, что вы получили адрес обратной связи, потому что ваш менеджер безопасности не позволяет вам подключаться с использованием локальной подсети. 192 адрес.

InetAddress.getByName("localhost") Джастс просит операционную систему выполнить разрешение имен, насколько я могу судить.

Другие вопросы по тегам