В чем именно была проблема с зоной .gr? Я уже точно не помню, но вроде бы 2.5 года назад (на момент написания статьи) ее не было. Хотя с некоторыми зонами они действительно были нерешаемые: если информация доступна только на вебе с каптчей, то вряд ли что-то можно придумать.
Через протокол whois — точно нет. Возможно, такая информация есть на сайтах некоторых регистраторов. Ну или кто-то достал такую статистику и еще где-то выложил.
Идея в том, чтобы минимизировать число возможных запросов (а значит и время ожидания пользователя).
Если я обращаюсь к ARIN, то (условно) в 75% случаев я получу требуемый результат с первого же запроса, в 24% случаев со второго (ARIN почти всегда указывает на правильный региональный сервер) и в 1% случаев с третьего или больше. Если же я обращаюсь к IANA, то мне всегда надо будет делать минимум два запроса. Минимум — потому что IANA тоже не всегда указывает на актуальный сервер. Например:
Если теперь обратиться к RIPE, то окажется, что IP адрес переделегирован AfriNIC, о чем IANA не знала. Стоит отметить, что ARIN также указывает на RIPE.
Возможно. Я первым спрашиваю ARIN из следующих соображений: 1. за большинство выделенных IP (и за подавляющее большинство IP, которые могут интересовать потенциальных пользователей нашего продукта) отвечает именно ARIN. 2. ARIN никого не банит.
Если бы сайт был в рунете (где за все IP адреса отвечает RIPE), вероятно, опрашивать ARIN первым имело бы меньше смысла.
Да, для работы с whois в «ручном» режиме, telnet — это все, что требуется.
Более того, некоторые whois серверы поддерживают специальные параметры, которые через Unix-овый whois или другую утилиту передать не удается. Так что остается только telnet.
Например, параметр "-B" позволяет whois.ripe.net выводить поля «notify», «changed» и «e-mail», которые по-умолчанию не выводятся:
$ telnet whois.ripe.net 43
Trying 193.0.6.135...
Connected to whois.ripe.net.
Escape character is '^]'.
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See http://www.ripe.net/db/support/db-terms-conditions.pdf
-B 213.180.204.0 <<<<< обратите внимание на "-B"
% Information related to '213.180.204.0 - 213.180.204.255'
inetnum: 213.180.204.0 - 213.180.204.255
netname: YANDEX-213-180-204
descr: Yandex enterprise network
country: RU
admin-c: YNDX1-RIPE
tech-c: YNDX1-RIPE
remarks: INFRA-AW
status: ASSIGNED PA
mnt-by: YANDEX-MNT
changed: artem@yandex-team.ru 20091116 <<<<< дополнительное поле
source: RIPE
...
pwhois/Net::Whois::Raw посмотрел — благодарю за ссылку.
Он работает так же, как и Ruby Whois: огромный конфигурационный файл с хардкодом на все случаи жизни (порядка 70КБ). На CPAN последнее обновление — август 2012 года.
Пробуем примеры из моей статьи:
$ ./pwhois 8.8.8.8
[whois.arin.net]
Level 3 Communications, Inc. LVLT-ORG-8-8 (NET-8-0-0-0-1) 8.0.0.0 - 8.255.255.255
Google Incorporated LVLT-GOOGL-1-8-8-8 (NET-8-8-8-0-1) 8.8.8.0 - 8.8.8.255
$ ./pwhois russia.edu.ru
[whois.ripn.net]
No entries found for the selected source(s).
Last updated on 2013.01.15 18:21:31 MSK
Всего не захардкодить.
Что меня заинтересовало: захардкоджено много сообщений с разных серверов о том, что «Lookup quota exceeded». В Ruby Whois они тоже есть, но там информация раскидана по разных файлам (для каждого whois сервера), и ее трудно найти, а тут все в одном месте. Получается, что пользователей банят не только RIPE и AfriNIC, но и целый ряд других whois серверов (на практике я с этим раньше не встречался):
our %exceed = (
'whois.eu' => '(?:Excessive querying, grace period of|Still in grace period, wait)',
'whois.dns.lu' => 'Excessive querying, grace period of',
'whois.mynic.net.my' => 'Query limitation is',
'whois.ripn.net' => 'exceeded allowed connection rate',
'whois.domain-registry.nl' => 'too many requests',
'whois.nic.uk' => 'and will be replenished',
'whois.networksolutions.com' => 'contained within a list of IP addresses that may have failed',
'whois.worldsite.ws' => 'You exceeded the maximum',
'whois.tucows.com' => '(?:Maximum Daily connection limit reached|exceeded maximum connection limit)',
'whois.centralnic.com' => 'Query rate of \\d+',
'whois.pir.org' => 'WHOIS LIMIT EXCEEDED',
'whois.nic.ms' => 'Look up quota exceeded',
'whois.nic.gs' => 'look up quota exceeded',
'whois.nic.tl' => 'Lookup quota exceeded',
'whois.nic.mg' => 'Lookup quota exceeded',
'whois.nic.li' => 'You have exceeded this limit',
'whois.nic.ch' => 'You have exceeded this limit',
);
Благодарю!
Если я обращаюсь к ARIN, то (условно) в 75% случаев я получу требуемый результат с первого же запроса, в 24% случаев со второго (ARIN почти всегда указывает на правильный региональный сервер) и в 1% случаев с третьего или больше. Если же я обращаюсь к IANA, то мне всегда надо будет делать минимум два запроса. Минимум — потому что IANA тоже не всегда указывает на актуальный сервер. Например:
Если теперь обратиться к RIPE, то окажется, что IP адрес переделегирован AfriNIC, о чем IANA не знала. Стоит отметить, что ARIN также указывает на RIPE.
Если бы сайт был в рунете (где за все IP адреса отвечает RIPE), вероятно, опрашивать ARIN первым имело бы меньше смысла.
Более того, некоторые whois серверы поддерживают специальные параметры, которые через Unix-овый whois или другую утилиту передать не удается. Так что остается только telnet.
Например, параметр "-B" позволяет whois.ripe.net выводить поля «notify», «changed» и «e-mail», которые по-умолчанию не выводятся:
Он работает так же, как и Ruby Whois: огромный конфигурационный файл с хардкодом на все случаи жизни (порядка 70КБ). На CPAN последнее обновление — август 2012 года.
Пробуем примеры из моей статьи:
Всего не захардкодить.
Что меня заинтересовало: захардкоджено много сообщений с разных серверов о том, что «Lookup quota exceeded». В Ruby Whois они тоже есть, но там информация раскидана по разных файлам (для каждого whois сервера), и ее трудно найти, а тут все в одном месте. Получается, что пользователей банят не только RIPE и AfriNIC, но и целый ряд других whois серверов (на практике я с этим раньше не встречался):