Различное поведение InetSocketAddress # getHostName в Windows и Linux для "127.0.0.1" - PullRequest
1 голос
/ 04 апреля 2019
InetAddress.getByName("127.0.0.1").getHostName()

Выше String в windows возвращает 127.0.0.1, но в linux возвращается localhost.

Документы InetAddress#getHostName говорят:

Если этот InetAddress был создан с именем хоста, это имя хоста будет запомнено и возвращено; в противном случае будет выполнен обратный поиск имени, и результат будет возвращен на основе настроенной системой службы поиска имени.

  • Это ожидаемое поведение?
  • Почему это несоответствие для разных ОС?
  • Это тот случай, когда служба поиска имен для linux и windows отличается, и именно поэтому мы видим это различие в поведении?

Я видел этот вопрос , но мой вопрос касается разницы в поведении API в Windows и Linux и причины этой разницы.

1 Ответ

1 голос
/ 04 апреля 2019

Итак, нет принципиальной разницы между Windows и Linux.Однако есть разница в конфигурации двух.Как указано в вопросе, на который вы ссылались, это зависит от того, что находится внутри файла hosts.Это файл, который используется как в Windows, так и в Linux, и сообщает ОС, какие IP-адреса могут быть назначены определенным именам хостов.Вот пример записи в файле:

127.0.0.1    localhost

Это сообщит ОС, что если я сделаю запрос к localhost, просто перенаправлю запрос на 127.0.0.1.Это похоже на то, что делает DNS-сервер, но процесс происходит на вашем компьютере, без проверки интернета.

Теперь, ссылаясь на то, почему эта строка меняется на разных платформах.Документация гласит:

Если этот InetAddress был создан с именем хоста, это имя хоста будет запомнено и возвращено;в противном случае будет выполнен обратный поиск имени, и результат будет возвращен на основе настроенной системой службы поиска имен. Если требуется поиск службы имен, вызовите getCanonicalHostName.

Этот раздел относится к имени хоста, указанному в файле hosts.В вашей системе Linux в файле hosts есть запись, похожая на приведенную выше (что довольно часто встречается в средах Linux).Java замечает это и возвращает это вместо IP.Поскольку в Windows такой записи нет, вместо этого просто возвращается IP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...