Назад | Перейти на главную страницу

Как я могу найти сервер WHOIS для любого TLD?

Мне нужен надежный и актуальный список серверов WHOIS для использования в сценарии whois.
Поскольку список часто меняется, было бы неплохо, если бы существовал ресурс, на который я мог бы ссылаться, вместо того, чтобы часто обновлять скрипт.

Существует несколько хорошо известных способов поиска серверов Whois для TLD, база данных IANA, вероятно, наиболее близка к тому, что задается в вопросе, однако есть и другие источники, которые могут быть более полезными на практике.

Из IANA (доступ через whois и http)

Просматривать http://www.iana.org/domains/root/db или выполните поиск в базе данных whois по адресу whois.iana.org для TLD. Каждая запись имеет поле, определяющее кто сервер.

Пример:

$ whois -h whois.iana.org com
[Querying whois.iana.org]
[whois.iana.org]
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object

domain:       COM

organisation: VeriSign Global Registry Services
address:      12061 Bluemont Way
address:      Reston Virginia 20190
address:      United States

contact:      administrative
name:         Registry Customer Service
organisation: VeriSign Global Registry Services
address:      12061 Bluemont Way
address:      Reston Virginia 20190
address:      United States
phone:        +1 703 925-6999
fax-no:       +1 703 948 3978
e-mail:       info@verisign-grs.com

contact:      technical
name:         Registry Customer Service
organisation: VeriSign Global Registry Services
address:      12061 Bluemont Way
address:      Reston Virginia 20190
address:      United States
phone:        +1 703 925-6999
fax-no:       +1 703 948 3978
e-mail:       info@verisign-grs.com

nserver:      A.GTLD-SERVERS.NET 192.5.6.30 2001:503:a83e:0:0:0:2:30
nserver:      B.GTLD-SERVERS.NET 192.33.14.30 2001:503:231d:0:0:0:2:30
nserver:      C.GTLD-SERVERS.NET 192.26.92.30
nserver:      D.GTLD-SERVERS.NET 192.31.80.30
nserver:      E.GTLD-SERVERS.NET 192.12.94.30
nserver:      F.GTLD-SERVERS.NET 192.35.51.30
nserver:      G.GTLD-SERVERS.NET 192.42.93.30
nserver:      H.GTLD-SERVERS.NET 192.54.112.30
nserver:      I.GTLD-SERVERS.NET 192.43.172.30
nserver:      J.GTLD-SERVERS.NET 192.48.79.30
nserver:      K.GTLD-SERVERS.NET 192.52.178.30
nserver:      L.GTLD-SERVERS.NET 192.41.162.30
nserver:      M.GTLD-SERVERS.NET 192.55.83.30
ds-rdata:     30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CFC41A5766

whois:        whois.verisign-grs.com

status:       ACTIVE
remarks:      Registration information: http://www.verisign-grs.com

created:      1985-01-01
changed:      2012-02-15
source:       IANA

$

От whois-servers.net (доступ через DNS)

Имя tld.whois-servers.net это CNAME на соответствующий whois-сервер. Несколько неясно, кто на самом деле поддерживает это, но он кажется довольно популярным, так как его очень легко использовать практически с любым клиентом whois (а некоторые клиенты по умолчанию используют эту службу).

Пример:

$ dig com.whois-servers.net +noall +answer

; <<>> DiG 9.9.4-P2-RedHat-9.9.4-15.P2.fc20 <<>> com.whois-servers.net +noall +answer
;; global options: +cmd
com.whois-servers.net.  600     IN      CNAME   whois.verisign-grs.com.
whois.verisign-grs.com. 5       IN      A       199.7.55.74
$

Из самого реестра (доступ через DNS)

Многие реестры публикуют адрес своего Whois-сервера в DNS непосредственно в соответствующей зоне как _nicname._tcp SRV запись.

Пример:

$ dig _nicname._tcp.us SRV +noall +answer

; <<>> DiG 9.9.4-P2-RedHat-9.9.4-15.P2.fc20 <<>> _nicname._tcp.us SRV +noall +answer
;; global options: +cmd
_nicname._tcp.us.       518344  IN      SRV     0 0 43 whois.nic.us.
$

Я регулярно составляю список из IANA и PSL в XML-файл, включая whois-сервер, регистратора, домены второго уровня и, если возможно, регулярное выражение для доступности: https://github.com/whois-server-list/whois-server-list

В последнее время я поигрался с WHOIS и обнаружил, что некоторые из общедоступных пакетов whois (а именно jwhois CentOS), похоже, полагаются на заранее подготовленные списки серверов WHOIS TLD. Хотя это будет нормально для большинства TLD, это проблема взрывного роста эзотерических gTLD, таких как .horse.

На 100% надежным методом является поиск TLD на сервере WHOIS IANA, whois.iana.org, разобрать whois: запись, а затем запрос который сервер информации о домене. Например:

foo@bar:~ $ echo -e "horse\r\n" | nc -i 1 whois.iana.org 43
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object

domain:       HORSE

[snip]

whois:        whois-dub.mm-registry.com

[snip]

Connection closed by foreign host.

А потом:

foo@bar:~ $ echo -e "dord.horse\r\n" | nc -i 1 whois-dub.mm-registry.com 43
Domain Name: dord.horse
Domain ID: 1742946-MMd1
WHOIS Server: whois-dub.mm-registry.com
[snip]

Если вы используете этот метод, вы должны быть вежливыми и кэшировать ответы с сервера IANA не менее 48 часов, если не дольше, поскольку они редко меняются, а серверы IANA, как правило, сильно загружены.

Я веду список серверов WHOIS для моей библиотеки Ruby WHOIS по адресу https://github.com/weppos/whois/blob/master/data/tld.json

Он содержит список всех существующих серверов.

Он не содержит ответа, когда домен доступен, потому что библиотека Ruby выполняет синтаксический анализ на другом уровне. Также имейте в виду, что не все реестры используют строковые сообщения для сообщения о недоступности домена.

вы можете использовать этот сценарий для получения серверов whois от IANA. Создано noys. вывод в формате JSON списка зон и whois серверов.

<style>
body {
    font: normal 10px verdana, sans-serif;
    color: #333;
}
</style>

<?
$zones = array('ac','am','asia','at','be','biz','biz.ua','biz.ua','br.com','bz','cc','ch','co','co.am','co.in','co.ua','co.ua','om','com.am','com.kz','com.ua','cx','cz','de.com','eu','eu.com','firm.in','fm','gen.in','im','in','ind.in','info','io','kiev.ua','kz','la','lc','li','lt','lu','md','me','mn','mobi','ms','mx','name','net','net.am','net.in','org','org.am','org.in','org.kz','ph','pl','pp.ua','pro','pw','pw','ru','ru.com','so','su','su','su','tel','tv','tw','us','uy.com','vc','ws','xxx','za.cm','xn--p1ai');

$count = count($zones);

echo '<h1>Whois tool</h1>';

echo '<pre>
{
';

for($i=0;$i<$count;$i++) {
    $root_server = 'whois.iana.org';
    $zone = $zones[$i];
    $domain = 'nuceti75.'.$zones[$i];
    //echo "<h2>$domain - $current_domain</h2>";
    $fp = fsockopen($root_server, 43);
    if (!$fp) echo "Connection error: $root_server \r\n";
    else { 
        fputs($fp, $zone."\r\n");
        while (!feof($fp)) {
            $root_answer .= fgets($fp, 128);
        }
        preg_match("~whois:\s(.+)~i", $root_answer, $result);
        $current_server = trim($result[1]);
        fclose($fp);
    } 

    //echo "<pre>$root_answer</pre>";
    //echo "<b>Whois server for this TLD:</b> $current_server";

    $fh = fsockopen($current_server, 43);
    if (!$fh) echo "Connection error: $current_server ($zone) \r\n";
    else { 
        fputs($fh, $domain."\r\n");
        while (!feof($fh)) {
            $current_answer .= fgets($fh, 128);
        }
        fclose($fh);
    }

    //echo "<pre>$current_answer</pre>";

    echo "\"$zone\": \"$current_server\",\r\n";

    unset($root_answer);
    unset($current_answer);
    unset($result);

}

echo '
}
</pre>';

?>

Вам не понадобится их список. whois (1) достаточно умен, чтобы понять это за вас:

Для страницы руководства:

         By default whois constructs the name of a whois server to use
         from the top-level domain (TLD) of the supplied (single) argu-
         ment, and appending ".whois-servers.net".  This effectively
         allows a suitable whois server to be selected automatically for a
         large number of TLDs.

Whois в целом довольно надежен. Я никогда не припоминаю, чтобы он терпел неудачу для домена.