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

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Принудительная проверка если домен был определён как не зарегистрированный