Как проверить, действительно ли данное имя хоста существует? - PullRequest
2 голосов
/ 12 ноября 2011

Как проверить, действительно ли данное имя хоста существует в Java?

Проблема в некоторых службах DNS, таких как Opendns, которые будут возвращать IP-адрес даже для несуществующих записей DNS и, следовательно, InetAddress.getByName( host)всегда будет возвращать что-либо.

Однако команда host может как-то обнаружить это:

~$ host owqieyuqowiery.com
owqieyuqowiery.com has address 67.215.77.132
Host owqieyuqowiery.com not found: 3(NXDOMAIN)

Ответы [ 3 ]

4 голосов
/ 12 ноября 2011

Зависит от того, что вы подразумеваете под «действительно существует». Вы имеете в виду, что это зарегистрированный домен, за которым стоит веб-сайт? Имя хоста - это просто более легко читаемая / запоминающаяся форма по сравнению с IP-адресом для данной системы. Другими словами, я мог бы зарегистрировать домен (который является просто общедоступным коротким именем для системы), и не размещать веб-сайт на сервере, на который указывает домен, и который не делает домен меньше ». реальный».

Если вы просто хотите просмотреть A записи, вот решение:

Если вы хотите знать, что делает host, что может пролить некоторый свет на то, почему он делает то, что он делает, здесь есть некоторая информация: http://linux.die.net/man/1/host В основном, когда это не удается, это означает поиск DNS не удалось. То есть DNS-сервер (ы), к которому host подключен для поиска этого домена, дал нулевой результат.

Кроме того, host возвращает больше, чем просто запись DNS A (которая используется для веб-сайтов). Он также выдаст вам записи MX (почтовый сервер) и т. Д.

Ex:

$ host google.com
google.com has address 74.125.225.48
google.com has address 74.125.225.49
google.com has address 74.125.225.50
google.com has address 74.125.225.51
google.com has address 74.125.225.52
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
2 голосов
/ 12 ноября 2011

Используйте InetAddress.getByName(address).isReachable(timeout); вместо.

1 голос
/ 14 ноября 2011

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

Для Java это должно быть возможно при использовании библиотеки dnsjava.

Вам нужно будет начать с корневых серверов имен и выполнить следующие действия.цепь ссылок вниз (так же, как обычный рекурсивный сервер), чтобы найти подходящий полномочный сервер имен.

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