Время прочтения: 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);
  • контактная информация регистранта доменного имени.

            На мой взгляд, это простой и быстрый способ проверки домена и получения данных о нем без необходимости использования веб-сервисов. Но, конечно же, выбор всегда за конечным пользователем и зависит от поставленных задач и доступных ресурсов.