Thank you for reading this post, don't forget to subscribe!
Как получить дату регистрации доменного имени
Самый простой вариант — использовать глобальную базу данных whois. В ней хранится информация о доменных именах, такая как организация, ответственное лицо, контакты для связи, дата регистрации и дата окончания срока регистрации. И это как раз то, что нам нужно. Давайте возьмем какой-нибудь популярный домен для примера. Пусть это будет yandex.ru. Вот какая информация хранится в базе whois об этом домене:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$ whois yandex.ru % By submitting a query to RIPN's Whois Service % you agree to abide by the following terms of use: % http://www.ripn.net/about/servpol.html#3.2 (in Russian) % http://www.ripn.net/about/en/servpol.html#3.2 (in English). domain: YANDEX.RU nserver: ns1.yandex.ru. 213.180.193.1, 2a02:6b8::1 nserver: ns2.yandex.ru. 93.158.134.1, 2a02:6b8:0:1::1 state: REGISTERED, DELEGATED, VERIFIED org: YANDEX, LLC. registrar: RU-CENTER-RU admin-contact: https://www.nic.ru/whois created: 1997.09.23 paid-till: 2017.10.01 free-date: 2017.11.01 source: TCI Last updated on 2017.01.03 05:46:31 MSK |
Поле, которое нас интересует — «paid-till», это дата, до которой у нас оплачен домен.
Мониторинг даты продления доменного имени
Мониторинг даты продления доменного имени сделаем примерно так же, как и мониторинг сертификата, но заметно проще. Получаем данные о домене, ищем поле, содержащее дату окончания регистрации, если оно присутствует (если данные whois для этого домена не закрыты), получаем эту дату, получает сегодняшнюю дату и выводим разницу в днях. При желании можно добавить отправку письма, если осталось, скажем, меньше 30 дней до окончания регистрации. Но не всё так просто. Потому что есть как минимум три вида записей об окончании срока регистрации. Первый выглядит так:
1 |
paid-till: 2017.10.01 |
Второй выглядит так:
1 |
Registrar Registration Expiration Date: 2020-09-13T21:00:00-0700 |
И третий выглядит так:
1 |
Registry Expiry Date: 2018-05-11T04:00:00Z |
И нам, соответственно, надо предусмотреть все три варианта. Или, если встретится четвертый, то и четвертый. Пока давайте разберемся с этими тремя.
Вот как выглядит скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#!/bin/bash # Если параметр не указан, выводим подсказку и завершаем работу if [ "$1" == "" ] then cat << EOF Script that monitors how many days left until domain registration ends. Usage: $(basename $0) domain.name EOF exit fi # Получаем строку, содержащую дату окончания регистрации PAIDTILL=$(whois $1 | grep 'paid-till\|Registrar Registration Expiration Date\|Registry Expiry Date') # Если такая строка не найдена, выходим с ошибкой if [ -z "$PAIDTILL" ] then echo "Registration end date is not available in whois database" exit 1 else # Если дата выглядит как ГГГГ.ММ.ДД, то добавляем 00:00:00 в конец [[ "$PAIDTILL" =~ "paid-till" ]] && PAIDTILL=${PAIDTILL//./-}" 00:00:00" # Удаляем из строки всё до двоеточия, само двоеточие # плюс автоматически будут удалены пробелы PAIDTILL=${PAIDTILL#*:} # Получаем текущую дату CURRENTDATE=$(date "+%Y-%m-%d %H:%M:%S") # Находим разницу между датами, получаем количество оставшихся дней DAYS_LEFT=$(( ($(date -d "$PAIDTILL" +%s) - $(date -d "$CURRENTDATE" +%s) ) / 86400 )) # Выводим, сколько дней осталось echo $DAYS_LEFT days left fi |
Вот результат работы этого скрипта для разных доменов на момент написания статьи:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ ./check-dn-reg.sh linux.org 492 days left $ ./check-dn-reg.sh yahoo.com 2206 days left $ ./check-dn-reg.sh yandex.ru 270 days left $ ./check-dn-reg.sh google.com 1349 days left $ ./check-dn-reg.sh ok.ru 331 days left $ ./check-dn-reg.sh vk.com 170 days left $ ./check-dn-reg.sh linux.org 492 days left $ ./check-dn-reg.sh linux.org.ru 345 days left |