Как стать автором
Обновить
43
0

Пользователь

Отправить сообщение
В чем именно была проблема с зоной .gr? Я уже точно не помню, но вроде бы 2.5 года назад (на момент написания статьи) ее не было. Хотя с некоторыми зонами они действительно были нерешаемые: если информация доступна только на вебе с каптчей, то вряд ли что-то можно придумать.

Благодарю!
Через протокол whois — точно нет. Возможно, такая информация есть на сайтах некоторых регистраторов. Ну или кто-то достал такую статистику и еще где-то выложил.
Дописал в статью несколько слов про pwhois.
Идея в том, чтобы минимизировать число возможных запросов (а значит и время ожидания пользователя).

Если я обращаюсь к ARIN, то (условно) в 75% случаев я получу требуемый результат с первого же запроса, в 24% случаев со второго (ARIN почти всегда указывает на правильный региональный сервер) и в 1% случаев с третьего или больше. Если же я обращаюсь к IANA, то мне всегда надо будет делать минимум два запроса. Минимум — потому что IANA тоже не всегда указывает на актуальный сервер. Например:

$ whois -h whois.iana.org 213.154.64.0

refer:        whois.ripe.net

inetnum:      213.0.0.0 - 213.255.255.255
organisation: RIPE NCC
status:       ALLOCATED

whois:        whois.ripe.net

changed:      1993-10
source:       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',
);

Информация

В рейтинге
Не участвует
Откуда
Украина
Зарегистрирован
Активность