Время прочтения: 4 мин.
Выполняя задачу по проверке подлинности доменных имен, имеющихся в документации, мне также было необходимо собрать некоторую информацию: об истории доменов, их регистраторах, дате создания и дате завершения регистрации, владельцах доменных имен. Для проверки доменных имен в интернете существует достаточное количество сервисов, получающих информацию из общедоступной базы данных доменных имен WHOIS. Например: icann lookup, whois+, reg.ru, domaintools.com, be1.ru.
Однако наличие ряда ограничений не позволило мне использовать веб-версии этих сервисов. Поэтому я решил использовать python-библиотеку python-whois, которая позволила решить данную задачу, напрямую выполняя запрос к серверу WHOIS. О том, как это было реализовано в Jupyter notebook, продемонстрирую в данном посте.
Для начала я установил python-whois из командной строки (ОС Windows):
pip install python-whois
Проверка доменного имени
Далее выполнил импорт модуля whois, и создал функцию, которая проверит, зарегистрировано ли доменное имя. Функция whois.whois вызывает исключение для доменов, которых не существует:
import whois
# проверка регистрации доменного имени
def is_reg(domain_name):
try:
reg = whois.whois(domain_name)
except Exception:
return False
else:
return bool(reg.domain_name)
Затем я создал список с доменными именами и проверил, есть ли запись о них в базе данных сервера WHOIS:
# список проверяемых доменов
dmns = [
'newtechaudit.ru',
'github.com'
'compress.ru',
'cocacola-promo.ru',
'gos-yslygu.ru'
]
# итерация доменов
for dmn in dmns:
print(dmn, '- ЗАРЕГИСТРИРОВАН' if is_reg(dmn) else '- !!!НЕ ЗАРЕГИСТРИРОВАН!!! ')
Ниже привожу результат этого кода, в котором выведены зарегистрированные и не зарегистрированные доменные имена:

Информация о домене
Чтобы получить дополнительную информацию о каком-либо доменном имени, следует передать это имя в функцию whois.whois и получить нужные сведения:
- имя компании, которая резервирует доменные имена (регистратора домена), указываю в коде соответствующий атрибут – registrar:
# проверка заданного доменного имени
domain_name = 'github.com'
if is_reg(domain_name):
w_inf = whois.whois(domain_name)
# регистратор
print('Регистратор: ', w_inf.registrar)

- имя сервера WHOIS
# сервер WHOIS
print('Сервер WHOIS: ', w_inf.whois_server)

- дату создания и срок действия домена
# дата создания
print('Дата создания: ', w_inf.creation_date)
# дата окончания срока действия
print('Дата окончания срока: ', w_inf.expiration_date)

Если для проверяемого доменного имени необходимо, кроме перечисленного, вывести более полные данные, то использую следующий код:
# вся информация о домене
print(w_inf)
Результат кода:

В данном выводе (помимо уже перечисленного выше) содержится следующая информация:
- name_server — сервера имен DNS проверяемого доменного имени;
- status — коды статуса клиента, установленные регистратором домена, которые указывают реестру домена о том, что необходимо отклонять запросы на: удаление домена (clientDeleteProhibited); передачу домена от текущего регистратора другому регистратору (clientTransferProhibited); обновление домена (clientUpdateProhibited);
- emails — почтовый ящик электронной почты (abusecomplaints@markmonitor.com) регистратора для сообщений о злоупотреблениях;
- dnssec — подписание или не подписание (signed/unsigned) делегирования расширений безопасности системы доменных имен (domain name system security extensions);
- контактная информация регистранта доменного имени.
На мой взгляд, это простой и быстрый способ проверки домена и получения данных о нем без необходимости использования веб-сервисов. Но, конечно же, выбор всегда за конечным пользователем и зависит от поставленных задач и доступных ресурсов.