В процессе разработки сервиса для поиска дроп доменов необходимо было:
- получить whois информацию по найденному домену
- структурировать данные и сохранить в БД.
Получение whois информации
Поискав, какие решения есть на гитхабе на php, я нашел несколько реализаций. Попробовал и пришел к выводу, что в этом случае использовать гитхаб репозитории, у которых нет активных контрибьюторов не стоит. Причина в том, что регулярно появляются новые доменные зоны, поэтому надо поддерживать базу whois серверов актуальной.
В итоге я решил отказаться от репозиториев написанных на php в пользу whois клиента, который встроен в Ubuntu. Вот его репозиторий https://github.com/rfc1036/whois Его активно поддерживают и развивают, так что риск, что его забросят минимален.
Если он у вас не установлен:
apt-get install whois
Пользоваться им просто:
whois thisis-blog.ru
Результат
Данные получены, но это просто текст. Его надо распарсить и сохранить в БД.
Парсинг whois информации
Для этой цели я не нашел подходящего мне решения. Многие уже заброшены. Сделал свой велосипед https://github.com/shapito27/whois.
На первый взгляд задача вычленения нужных данных может показаться тривиальной. Но сложность кроется в разных форматах ответа от разных whois серверов.
Например ответ на whois car.co.uk
Сравните его с первым скриншотом.
По другим доменным зонам можно получить совершенно другой неожиданный формат. Думаю проблема стала понятна. Её я попытался решить в выше указаном инструменте. Результат работы получается примерно такой:
Shapito27\Whois\Whois::__set_state(array(
'status' => 1,
'creationDate' => '1997-03-29 05:00:00',
'updateDate' => '2020-03-10 18:53:59',
'expirationDate' => '2028-03-30 04:00:00',
'nameServers' =>
array (
0 => 'a.ns.facebook.com',
1 => 'b.ns.facebook.com',
2 => 'c.ns.facebook.com',
3 => 'd.ns.facebook.com',
),
'registrar' =>
Shapito27\Whois\Registrar::__set_state(array(
'id' => '3237',
'name' => 'RegistrarSafe, LLC',
'abuseContactEmail' => '[email protected]',
'abuseContactPhone' => '+1.6503087004',
)),
'registryDomainId' => '2320948_DOMAIN_COM-VRSN',
'errorMessage' => NULL,
))
Оставить комментарий