InetAddress.getLocalHost (). GetHostAddress ();задействовать DNS-сервер? - PullRequest
3 голосов
/ 12 сентября 2011

со следующим кодом

InetAddress.getLocalHost().getHostAddress();

можно получить адрес хоста. Но как JVM узнает это?

API Java только сообщает вам, что возвращает его ( Справочник по API ), но задействован ли DNS-сервер, и если да, когда он вызывается?

А если он вызывается только один раз, как имя сервера сохраняется локально?

Ответы [ 3 ]

6 голосов
/ 12 сентября 2011

Фактическая реализация выполняется с помощью JNI, в нативном коде, поэтому она будет отличаться от платформы к платформе.

Тем не менее, нет необходимости в DNS для поиска IP-адреса на компьютере, где расположены сетевые карты. Можно просто прочитать информацию ip с сетевых карт.

Плохая новость: невозможно точно знать, будет ли это выполнять поиск DNS на любой платформе, на которой работает Java, так как это собственный код, и возможность того, что машина выполняет поиск DNS, даже когда она работает. на самом деле не существует необходимости.

Хорошая новость: на моем компьютере с Linux он не выполняет поиск DNS (подтверждается через Wireshark), что я и ожидал. Если вы думаете, что он выполняет поиск, существует несколько причин, по которым он может выполнять поиск (в зависимости от того, насколько настраиваем ваш собственный клиент bind), и если вы установите wireshark (или используете подходящий сетевой анализатор), вы можете быстро выяснить, если ты сам смотришь вверх.

Редактировать: обратите внимание, что поиск имени будет в части .getLocalHost() связанных вызовов, если его вообще нужно искать.

0 голосов
/ 12 сентября 2011

InetAddress.getLocalHost () не делает то, что думает большинство людей.Фактически он возвращает имя хоста машины и IP-адрес, связанный с этим именем хоста.Это может быть адрес, используемый для подключения к внешнему миру.Может и нет.Это зависит только от того, как настроена ваша система.

В моем windowsbox он получает имя машины и внешний IP-адрес.На моем Linux-компьютере он возвращает имя хоста и 127.0.0.1, потому что он установлен в / etc / hosts

. Здесь не используется DNS-сервер.

0 голосов
/ 12 сентября 2011

InetAddress (в частности, результат InetAddress.getLocalHost()) представляет IP-адрес, а getHostAddress() возвращает его текстовое представление, поэтому поиск DNS не требуется.

Если вам нужно имя хоста, вы можете позвонить getHostName() - он может выполнить обратный поиск DNS:

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

...