Перейти к основному содержимому

Net::Whois - Парсер проверяет данные о домене через RDAP и WHOIS

Обзор парсера​

Обзор парсера

Данные о домене собираются через RDAP (HTTP, JSON), WHOIS (порт 43) или веб-страницу оператора — в зависимости от доменной зоны. Для каждого TLD в парсере заданы RDAP- и WHOIS-серверы; если для зоны доступен RDAP, запрос выполняется через него в первую очередь, при ошибке — на WHOIS, если нет ни того ни другого — через веб, когда страница есть.

Набор способов проверки зависит от оператора, а не только от TLD. У части зон WHOIS или RDAP нет либо они не работают — так решил оператор. Веб-страница для проверки тоже есть не у всех: её наличие тоже задаёт оператор. Если страница есть, парсер запрашивает данные через неё.

Есть зоны, где оператор владеет только TLD, а сайты регистрируются на SLD (второй уровень, например co.uk, org.uk). Владельцем SLD может быть один или несколько — но это не оператор TLD. Набор способов проверки задаёт уже владелец SLD: WHOIS, RDAP, веб-страница, их сочетание — или ничего из этого.

Состав полей в WHOIS и RDAP тоже может отличаться — из-за законодательства, политики оператора и ограничений на персональные данные. Но набор в целом предсказуем: регистрация, даты, NS, регистратор, статус.

При сборе через веб стандартизации нет. Всегда проверяется, зарегистрирован домен или нет. Остальное зависит от того, что оператор вывел на странице: может быть почти полный набор, а может быть только факт регистрации.

Подробнее: RDAP (англ.), WHOIS.

Функционал A-Parser позволяет сохранять настройки парсинга для дальнейшего использования (пресеты), задавать расписание парсинга и многое другое. Вы можете использовать автоматическое размножение запросов, подстановку подзапросов из файлов, перебор цифро-буквенных комбинаций и списков для получения максимально возможного количества результатов.

Сохранение результатов возможно в том виде и структуре которая вам необходима, благодаря встроенному мощному шаблонизатору Template Toolkit который позволяет применять дополнительную логику к результатам и выводить данные в различных форматах, включая JSON, SQL и CSV.

Кейсы по применению парсера​

Собираемые данные​

Список ниже — типичный набор для WHOIS/RDAP; конкретные поля зависят от ответа сервера и законов. При сборе через веб гарантированно заполняется только факт регистрации; прочие поля — если оператор их публикует.

  • $registered — зарегистрирован домен или нет
  • $expire_date — дата окончания регистрации домена
  • $creation_date — когда зарегистрирован домен
  • $free_date — дата освобождения домена
  • $whoisserver — используемый WHOIS-сервер (при WHOIS-запросе; при RDAP часто пустой)
  • $rdapserver — URL RDAP-сервера (при успешном RDAP-запросе)
  • $registrar — регистратор домена
  • $updated_date — дата последнего обновления записи
  • $data — сырой ответ: текст WHOIS или JSON RDAP
  • Массив $ns (Name servers):
    • $ns.$i.server — имя NS-сервера
  • Массив $statuses (Statuses list):
    • $statuses.$i.status — статус домена

Возможности​

  • Автоматический выбор RDAP или WHOIS по доменной зоне (приоритет RDAP)
  • Если у зоны нет рабочего WHOIS/RDAP, но есть веб-страница оператора — проверка идёт через неё
  • Состав полей WHOIS/RDAP зависит от ответа сервера и законодательства
  • При сборе через веб всегда проверяется существование домена; остальные поля — только если оператор их отдаёт
  • У части зон (TLD и SLD) нет ни WHOIS/RDAP, ни веб-страницы — WHOIS-данные недоступны, но существование домена проверяется через Net::DNSNet::DNS
  • Поддерживается работа с интернациональными доменами (IDN, например яндекс.рф)

Варианты использования​

  • Сбор свободных доменов или тех, которые скоро освободятся
  • Сбор списка ns-серверов
  • Получение статусов доменов

Запросы​

В качестве запросов необходимо указывать домен искомого сайта, например:

a-parser.com  
yandex.ru
google.com
vk.com
facebook.com

Варианты вывода результатов​

A-Parser поддерживает гибкое форматирование результатов благодаря встроенному шаблонизатору Template Toolkit, что позволяет ему выводить результаты в произвольной форме, а также в структуированной, например CSV или JSON

Вывод по умолчанию​

Формат результата:

$query - registered: $registered, expire: $expire_date, creation: $creation_date

В результате отображен домен, зарегистрирован ли он, дата окончания регистрации и дата регистрации домена:

facebook.com - registered: 1, expire: 30.03.2028, creation: 29.03.1997
a-parser.com - registered: 1, expire: 25.02.2022, creation: 25.02.2012
vk.com - registered: 1, expire: 23.06.2021, creation: 24.06.1997
yandex.ru - registered: 1, expire: 01.10.2021, creation: 23.09.1997
google.com - registered: 1, expire: 14.09.2028, creation: 15.09.1997

Вывод списка NS​

Формат результата:

$ns.format('$server\n')

Пример результата:

demi.ns.cloudflare.com
vern.ns.cloudflare.com

Вывод данных о сроках домена в CSV​

Формат результата:

[% tools.CSVline(query, registered, expire_date, creation_date, updated_date, free_date, whoisserver, rdapserver, registrar) %]

Пример результата (домен .com, ответ через RDAP — whoisserver пустой, заполнен rdapserver):

a-parser.com,1,25.02.2027,25.02.2012,10.02.2026,none,,https://rdap.verisign.com/com/v1/domain/a-parser.com,"Squarespace Domains II LLC"

Вывод списка NS в таблицу CSV​

Формат результата:

[% FOREACH ns;
tools.CSVline(query, server);
END %]

Пример результата:

a-parser.com,demi.ns.cloudflare.com
a-parser.com,vern.ns.cloudflare.com

Дамп результатов в JSON​

Общий формат результата:

[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;

obj = {};
obj.query = query;
obj.registered = p1.registered;
obj.expire_date = p1.expire_date;
obj.creation_date = p1.creation_date;
obj.updated_date = p1.updated_date;
obj.free_date = p1.free_date;
obj.whoisserver = p1.whoisserver;
obj.rdapserver = p1.rdapserver;
obj.registrar = p1.registrar;
obj.domains = [];

FOREACH item IN p1.ns;
obj.domains.push({
server = item.server
});
END;

obj.json %]

Начальный текст:

[

Конечный текст:

]

Пример результата (RDAP):

[{
"registered": 1,
"rdapserver":"https://rdap.verisign.com/com/v1/domain/a-parser.com",
"query":"a-parser.com",
"free_date":"none",
"domains":[
{
"server":"demi.ns.cloudflare.com"
},
{
"server":"vern.ns.cloudflare.com"
}
],
"registrar":"Squarespace Domains II LLC",
"expire_date":"25.02.2027",
"creation_date":"25.02.2012",
"whoisserver":"",
"updated_date":"10.02.2026"
}]
подсказка

Чтобы опции "Начальный текст" и "Конечный текст" были доступны в Редакторе заданий, нужно активировать "Больше опций".

Обработка результатов​

A-Parser позволяет обрабатывать результаты непосредственно во время парсинга, в этом разделе мы привели наиболее популярные кейсы для парсера Net::Whois

Получение регистратора домена​

При ответе через WHOIS поле $p1.data содержит текст; при RDAP — JSON. Чтобы получить регистратора в обоих случаях, добавьте два Конструктора результатов.

Добавить Конструктор результатов и в выпадающем списке выбрать источник: $p1.data. Выбрать тип: RegEx Match. В поле Регулярка вписать: Registrar:\s*(.+) и сохранить в переменную registrarwhois.

Добавить снова Конструктор результатов и в выпадающем списке выбрать источник: $p1.data. Выбрать тип: RegEx Match. В поле Регулярка вписать: "entities"[\s\S]+?"vcardArray"[\s\S]+?"fn"[\s\S]+?"text"[\s\S]+?"([^"]+?)" и сохранить в переменную registrarrdap.

Добавить в Формат результата: [% IF registrarrdap == 'none' %]$query - $registrarwhois[% ELSE %]$query - $registrarrdap[% END %] — если RDAP не нашёл имя (registrarrdap равен none), выводится значение из WHOIS, иначе из RDAP.

Скачать пример

Как импортировать пример в А-Парсер

eJyVVNtO20AQ/RVrFEQoJioPfbGEqkATiSpNKAH1wU6lVTxJt6x3ze46EEX5987Y
jh1TpKpP9lzPmdvuYIPWSaMhugzBC/fk7iw69A6ieAd5+Q8RWFxL562wEEIurKMg
cohhij6Kfvwy0pEhxZUolIdwB36bI4UZym5limSUKckrYzPhKWnpBhuhCnaLT4Lb
cdBg2FTkwdVVcKqNxtPgZNF7LtBug4ug1/i8MCbFjSbz0fsenIUdpl/InmjYLxYh
VNBuXPIg5F5+OaiLbIxzscEHw2ylwlY9JmkqMubbS4VHtg6qgvpnA//KGUSaSk/d
FKpC4Ca1qI9aPnO9K6EchsCUJbqxNRnl9FhmKOs40IuhqgsoR1EGf69imhyOuI4F
MUnfWqRHK7yxs5wJkX4HRg+VmuAGleuQ2F4XUqU00uGKgm7rwPddZn/l2Df1HUPR
4F8scWiylNL17FsblZqJWTd2JTPpSeFuTKGp9o8hPCHmh57B1FB3MmOxQakDa3Ba
2xw1L1k7smHeqjpVdMZypNyBM4VdEl5M+DRlwa2vl5k2C1/L5PyN4P6waVGSuA/9
wfnZwfhQBZDoDU+xu7Ww2If/BZQAak97hS6BmLCSZL44/5zAZilsOrRWbLv6le7K
vFpdTT/+mQD9nSXwT858R0SZ6C2NXsn1rL7pQxML/UDPxkzfmCxXyBPXhVK0sA7v
28sZunpBWWhn9zb4poQgHs1bQnSMcl/nFbfcSmL3iTlntGPHqHXKpVDq8X5ybOFA
500+0yNr3yx2eTIgLqpHbbCkW2wvs6TKRS7p3teGDpEk7kT9BDZP5Y7W+be7q7Qc
Vur2fwBx19yZ

Возможные настройки​

ПараметрЗначение по умолчаниюОписание
Recursive query☐Позволяет получить расширенную версию WHOIS
WHOIS serverПозволяет задать свой WHOIS-сервер
RDAP serverПозволяет задать свой RDAP-сервер
Checking by DNS☑Позволяет проверять зарегистрирован ли домен исходя из существования IP по домену
Checking domains by DNS record☑Проверка IP, если находит status ALLOCATED, то определяет домен как зарегистрированный, если опция отключена, то проверка IP не происходит вовсе
Force DNS check for not found domains☑Принудительная проверка если домен был определён как не зарегистрированный