Whois что это такое

Что такое WHOIS? Основные возможности для проверки доменов

Что такое WHOIS?

WHOIS в основном используют, чтобы проверить доменное имя и его NS-записи, иногда сервис может использоваться для проверки свободный или занятый домен для дальнейшей его регистрации. В любом случае, если вы имеете дело с разработкой сайтов, инструмент WHOIS вам обязательно пригодится. Whois history подает очень информативные данные, особенно в случае, если нужно связаться с владельцем домена или узнать, где домен зарегистрирован (название компании-регистратора).

Whois что это такое. 1620926. Whois что это такое фото. Whois что это такое-1620926. картинка Whois что это такое. картинка 1620926

Как проверить домен сайта по WHOIS?

WHOIS сервис необходим тогда, когда нужно любой домен проверить бесплатно. Для начала проверки откройте WHOIS, в строку поиска введите интересующее доменное имя. В результате вы получите необходимую информацию по домену, если он уже зарегистрирован, или уведомление о том, что проверяемый домен все еще свободен для регистрации.

Использовать WHOIS инструменты максимально просто. Процесс проверки занимает считанные секунды, в независимости от выбранной доменной зоны. Для некоторых специфических или совсем новых доменных зон не все WHOIS сервисы отображают информацию. В таком случае, если информация о домене не получена с помощью одного сервиса WHOIS, нужно выбрать другой сервис для проверки домена.

Также часто WHOIS отображает в регистрационных данных домена данные компании регистратора, вместо владельца доменного имени. Это означает, что в настройках у регистратора владелец включил функцию Privacy Protection, которая скрывает персональные данные пользователя. В таком случае контактные данные не будут отображаться ни на одном WHOIS. Если вам нужно включить Privacy Protection для вашего домена, обратитесь напрямую к компании-регистратора, у которой вы зарегистрировали домен. После подключения хуиз домена будет отображать данные регистратора, а не ваши, которые вы указали во время регистрации домена.

Какие данные дает WHOIS сервис?

Whois online предоставляет всю необходимую контактную информацию о владельце домена, статус домена, дату регистрации и окончания, название компании-регистратора. Эту информацию используют в самых разных целях, так, например, можно узнать хостинг по домену или узнать владельца домена и в дальнейшем связаться с ним.

Используйте WHOIS сервис, чтобы узнать регистратора домена (может понадобиться, чтобы отправить жалобу на владельца сайта, поле Registrar WHOIS Server), узнать срок регистрации домена (когда нужно узнать возраст сайта), узнать окончание домена (эта информация может понадобится в случае, если вы захотите зарегистрировать данный домен на себя, в случае, если его не продлит текущий владелец).

Узнать возраст интересующего домена можно с помощью информации с поля created, которая отображает дату регистрации доменного имени.

Основные поля с данными в WHOIS

Registrant Name и все следующие поля включают информацию о владельце домена

Как узнать хостера по WHOIS?

Это на деле самый простой способ узнать компанию, где размещается сайт. Ведь в NS записях чаще всего указываются записи хостинг-провайдера. Обратите внимание на поле nserver, именно с этого поля можно узнать необходимую информацию. Правда, данное поле может отображать НС записи специальных сервисов, которые скрывают подобную информацию, например, Cloudflare, в таком случае отображаются данные этого сервиса, а не хостинг-провайдера.

Чтобы узнать хостера по WHOIS можно воспользоваться практически любым сервисом проверки, в том числе whois com, 2ip whois, а также достаточно новым сервисом от ГиперХост, который моментально показывает всю необходимую информацию по домену. С помощью его проверки можно быстро узнать, где домен сайта и проверить всю необходимую историю whois.

Можно ли указать вымышленные данные для отображения в WHOIS?

Если вы указали неверную, неправдивую информацию в регистрационных данных, вы можете потерять свой домен. Тот, кто указан в WHOIS данных домена является его владельцем и полностью контролирует домен, тоесть может менять данные при необходимости, продлить домен или перенести от одного регистратора к другому. Также очень важно при регистрации указать вашу существующую почту, именно на нее отправляется вся важная информация, которая касается домена.

Если при регистрации указаны вымышленные данные и вы не сможете их подтвердить наличием соответствующих документов, то в любое время вы можете потерять домен, например, если ваш аккаунт взломают. В таком случае вы не сможете подтвердить свою личность, на которую зарегистрирован домен, для восстановления прав на домен.

Нужно ли скрывать данные в WHOIS с помощью Privacy Protection?

Обратите внимание, чтобы перенести домен от одного регистратору к другому, необходимо деактивировать Privacy Protection, а после переноса активировать назад, если это нужно.

Источник

WHOIS

9 ноября 2017 Опубликовано в разделах: Азбука терминов. 7484

Whois что это такое. inner subscribe book. Whois что это такое фото. Whois что это такое-inner subscribe book. картинка Whois что это такое. картинка inner subscribe book

Whois что это такое. question 1. Whois что это такое фото. Whois что это такое-question 1. картинка Whois что это такое. картинка question 1

Whois: что это такое

Каждый год миллионы людей, частных и правительственных организаций регистрируют новые доменные имена. Любое лицо, юридическое либо физическое, должно предоставить контактные и идентификационные данные: имя, физический адрес, Email, номер телефона. Все это часто называют Whois информацией.

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

ICANN(корпорация по управлению доменными именами и IP-адресами), согласно нынешним правилам, обязана осуществлять меры по поддержанию своевременного, неограниченного публичного доступа к точным, правильным и полным Whois-данным. Поэтому регистраторы обеспечивают публичный доступ к информации о зарегистрированных доменных именах. Благодаря этому любой пользователь может использовать WHOIS-протокол для поиска нужной информации о домене или IP адресе.

Для чего используется WHOIS

Обязанности регистраторов доменных имен

Точность и правильность содержащейся в базе данных WHOIS информации зависит от компании-регистратора. Они обязаны предоставлять верные контакты, проверяя их валидность на протяжении всего периода регистрации.

Когда вы создаете домен как пользователь, вы должны предоставить достоверные контактные данные организации-регистратору, а при смене этих контактных данных удостоверять организацию и сообщить новые. Это одно из обязательств, которые вы на себя берете, соглашаясь с условиями договора о регистрации от провайдера.

Если же вы нарушаете это обязательство, то есть изначально даете неверную информацию, либо не обновляете ее, доменный провайдер может приостановить действие вашего права на использование домена или отобрать его. То же самое может произойти, если вы не ответите на уведомления о необходимости подтверждения ваших персональных данных, отправленных вашим доменным регистратором.

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

В зависимости от того, когда вы заключали договор с доменным провайдером, изменяются ваши права и обязанности, как владельца домена. Займитесь их изучением, дабы в будущем не возникло проблем.

История WHOIS

Корни системы отслеживания информации о доменных именах уходят в 1982 год, когда IETF(Инженерный совет интернета) опубликовали протокол WHOIS для пользователей ARPANET – прародителя интернета. Изначально предполагалось, что сервис будет использоваться для обмена информацией между системными администраторами ресурсов. С ростом интернета сфера применения системы расширялась. Ее использовали регистраторы, владельцы интеллектуальной собственности и торговых марок, коммерческих и некоммерческих организаций, и наконец она стала доступна обычным пользователям.

WHOIS: история домена

Отдельно стоит рассказать о применении данной системы при покупке нового домена. История доменного имени влияет на позиции сайта, это доказанный факт. Например, если вы собираетесь приобрести новый домен, необходимо проверить его WHOIS. Из истории можно узнать, был ли у него ранее владелец. Если был, при помощи различных тематических сервисов нужно вычислить его старую тематику. Если она не смежная с выбранной вами в качестве основной для сайта, который вы собираетесь разместить на купленном доменном имени, покупать его не стоит, так как это может привести к большим проблемам с поднятием сайта в топ поисковых систем.

WHOIS-сервисы

Whois-сервисы позволяют получить всю нужную информацию по домену.
Например, вот результаты запроса по сайту semantica.in в одном из таких сервисов:

Whois что это такое. 562ffd2e5f. Whois что это такое фото. Whois что это такое-562ffd2e5f. картинка Whois что это такое. картинка 562ffd2e5f

Примеры WHOIS сервисов:

Конфиденциальность

У многих пользователей может возникнуть вопрос: а что же с безопасностью? Ведь вся персональная информация о владельце сайта доступна по одному запросу, и для ее получения не нужно регистрироваться и каким-либо образом подтверждать то, что полученные данные вы не будете использовать для спама или других вредных действий. Да, это действительно так. С этим можно справляться двумя путями: регистрируя домен на специально созданные для этого почтовые ящики и телефоны, или же покупая дополнительные услуги у регистратора.

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

Вы можете закрыть ваши персональные данные от любопытных глаз (и спамботов, разумеется) за дополнительную плату. Тогда ваши вместо ваших данных в WHOIS сайта будут прописано «Private person» либо данные регистратора. Чтобы связаться с вами, желающим нужно будет заполнить форму обратной связи.

Но по запросу определенных лиц ваши персональные данные все же могут быть раскрыты, поэтому полностью защитить свои данные от третьих лиц невозможно. Такова политика главного регулятора – ICANN.

Whois что это такое. enot big service form promo. Whois что это такое фото. Whois что это такое-enot big service form promo. картинка Whois что это такое. картинка enot big service form promo

Специалисты студии SEMANTICA проведут комплексный анализ сайта по следующему плану:

– Технический аудит.
– Оптимизация.
– Коммерческие факторы.
– Внешние факторы.

Мы не просто говорим, в чем проблемы. Мы помогаем их решить

Источник

Whois: практическое руководство пользователя

Статья рассказывает о работе whois протокола, о существующих клиентских решениях и об особенностях коммуникации с различными whois серверами (а также о выборе правильного whois сервера). Ее основная задача — помочь в написании скриптов для получения whois информации для IP адресов и доменов.

Что такое whois?

Что такое и для чего нужен whois можно прочитать, например, здесь: http://en.wikipedia.org/wiki/Whois.

В нескольких словах, whois (от английского «who is» — «кто такой») – сетевой протокол, базирующийся на протоколе TCP. Его основное предназначение – получение в текстовом виде регистрационных данных о владельцах IP адресов и доменных имен (главным образом, их контактной информации). Запись о домене обычно содержит имя и контактную информацию «регистранта» (владельца домена) и «регистратора» (организации, которая домен зарегистрировала), имена DNS серверов, дату регистрации и дату истечения срока ее действия. Записи об IP адресах сгруппированы по диапазонам (например, 8.8.8.0 — 8.8.8.255) и содержат данные об организации, которой этот диапазон делегирован.

Часто whois используется для проверки, свободно ли доменное имя или уже зарегистрировано. Теоретически, это можно сделать просто открыв домен в браузере, однако на практике зарегистрированное имя не всегда используется.

Стоит отметить, что все контактные данные вводятся в момент регистрации, и со временем они могут устареть. Каждый регистратор имеет свою собственную процедуру их обновления, кроме того, сам процесс может занять некоторое время (хотя обычно это происходит в течение суток).

Протокол подразумевает клиент-серверную архитектуру и используется для доступа к публичным серверам баз данных (как правило, самих регистраторов IP адресов и доменных имен). В некоторых случаях, whois сервер для определенного домена верхнего уровня содержит полную базу данных обо всех зарегистрированных доменах. В других случаях, такой whois сервер содержит лишь самую базовую информацию и отсылает к whois серверам конкретных регистраторов.

Остальные детали будут рассмотрены по ходу самой статьи. Информации, на самом деле, очень много, поэтому специально для тех, кто хочет получить лишь общее представление, не углубляясь в технические детали, есть ее «выжимка»: можете сразу переходить к последнему разделу статьи, который называется «Короткие итоги«.

Небольшая предыстория

Есть программный продукт, Интернет-портал, который предоставляет различные сведения об IP адресах и доменах, в том числе whois информацию. Испокон веков для этих целей использовалась сторонняя утилита jwhois, в работу которой никто не вникал. Однако после миграции продукта на новую версию FreeBSD неожиданно оказалось, что jwhois перестал работать: для большинства доменов начала выдаваться абсолютно нелогичная ошибка «Unable to connect to remote host». Google не помог, и я уже был готов начинать дебажить C-шный код, как вдруг оказалось, что jwhois нам вообще не подходит из-за своей лицензии (GPL v3). В общем, встала задача поиска какого-то альтернативного решения.

К моему удивлению, каких-либо вменяемых альтернатив в наличии не оказалось. Большинство форумов как раз и рекомендовали использовать тот самый jwhois. Несколько программ, конечно, нашлось (в том числе несколько библиотек на родном для нашего продукта языке Python), однако большинство из них были забракованы уже буквально после первого же теста на домен в зоне «ua». В целом, все решения выглядели откровенно написанными «на коленке» и абсолютно неподходящими для серьезного продукта. Единственная библиотека, которая на тот момент вызывала доверие, была написана на Ruby (что совсем нам не подходило) и имела пугающий размер исходников и различных конфигурационных файлов для каждого конкретного whois сервера.

Оставалась еще стандартная Unix-овая утилита, так и называющаяся «whois», однако и ее работа оставляла желать лучшего.

В общем, единственным вариантом было садиться читать спецификации по протоколу и писать решение самому.

Результатом этого стал модуль на языке Python на 1000 строк кода, в процессе написания которого я последовательно наступил на все сопутствующие грабли, и, в конечном итоге, данная статья, которая про все эти «грабли» и рассказывает (да, если что, то код проприетарный).

Забегая наперед, замечу, что с высоты приобретенного опыта и jwhois, и Ruby Whois (http://www.ruby-whois.org) теперь также выглядят «оставляющими желать лучшего».

В чем, собственно, проблема?

Вся работа whois описана в RFC 3912 (http://tools.ietf.org/html/rfc3912) и занимает целых 4 страницы. В нескольких словах, все сводится к следующему: откройте TCP соединение на порт 43 к нужному whois серверу, пошлите запрос в определенном формате (который для конкретного whois сервера может быть каким угодно), закончите его «\r\n» и получите результат, формат которого для конкретного whois сервера также может быть каким угодно. Закрытие сервером соединения означает окончание результата. Все! Иными словами, каждый whois сервер определяет формат коммуникации по собственному усмотрению. Это уже не говоря о том, что абсолютно неочевидно, откуда взять нужный whois сервер для конкретного домена или IP адреса.

Я, конечно, наивно рассчитывал, что найду в Интернете море практических статей, в которых все это будет детально расписано, однако в результате не нашел ни одной. В основном, все сводилось лишь к пережевыванию скудной информации из RFC и названиям нескольких самых известных whois серверов. Хотя некоторую разрозненную информацию все-таки удалось найти.

В общем, пришлось смотреть код Unix-ового whois, а также jwhois и Ruby Whois — их принцип работы и будет рассмотрен далее.

Unix-овый whois

Итак, что собой представляет работа Unix-ового whois?

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

Оказывается, whois сервер знает про целый ряд доменов, похожих на «google.com» и не знает, какой из них выбрать.

Как видим, IP адрес сначала был делегирован одной организации в рамках определенного диапазона, а позднее переделегирован другой организации в рамках уже меньшего поддиапазона. И whois сервер снова не знает, какая именно информация нас интересует.

Иными словами, программа полагается на самый общий принцип работы whois протокола и абсолютно не готова к каким-либо исключениям. Для «дискавери» доменных whois серверов используется whois-servers.net, что в настоящее время отнюдь не самый эффективный способ.

jwhois

Теперь посмотрим, как работает самая популярная whois утилита. В отличие от Unix-ового whois она не делает никакого «дискавери», а всецело полагается на километровый конфигурационный файл (около тысячи строк!), в котором захардкоджены whois серверы для всех известных доменов верхнего уровня, для ряда специфических доменов второго уровня (которые имеют собственные whois серверы) и даже для конкретных диапазонов IP адресов. Стоит ли говорить, что в современном быстро меняющемся мире этот конфигурационный файл будет требовать ежедневных обновлений и все равно вряд ли когда-нибудь будет на 100% актуальным? В шапке файла есть ссылка на репозиторий, с которого можно скачивать последнюю версию, и оказалась, что она датирована апрелем 2011-го года! За это время появилось множество новых whois серверов, а часть старых уже не работает. Уверен, что делегирован и целый ряд новых IP диапазонов — особенно для IPv6.

Кроме собственно названий whois серверов, в файле в специальном формате описаны все известные исключения для форматов запросов, а также формат ссылок на другие whois серверы (намного больше, чем в Unix-овом whois).

Также обнаружилась еще одна интересная функциональность. Для многих доменов верхнего уровня whois серверов на самом деле нет, или доступ к ним ограничен, однако whois информация доступна через веб на их сайте. Так вот, jwhois умеет посылать GET-ом или POST-ом нужный запрос, получать результат и потом выкусывать из HTML необходимую информацию. Адреса страниц, имена параметров формы и формат результата для каждого конкретного случая также захардкоджены в конфигурационном файле. Естественно, во многих случаях эти данные уже устарели, и «scraping» не работает. Некоторые сайты просто добавили в свои формы каптчу — возможно, как раз против подобных программ.

Возвращаясь к примерам выше, jwhois корректно выдает результат для «google.com», но с «8.8.8.8» он ничем не лучше Unix-ового whois.

В общем, как оказалось, jwhois не такая уж и хорошая программа, как думалось. Полагаться только на захардкодженный список серверов (даже если бы он регулярно обновлялся) явно не самая лучшая идея.

Ruby Whois

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

На тот момент у меня уже были в наличии названия нескольких «хитрых» whois серверов (и понимание того, откуда их можно взять) — в конфигурации Ruby Whois никакой информации про них не было.

Я не имел возможности (да и особого желания) запускать Ruby Whois, поэтому не знаю, справился бы он с «8.8.8.8» или нет.

pwhois

despair/Net-Whois-Raw-2.43/. Последнее обновление датировано августом 2012 года.

Программа использует все тот же метод хардкода: есть огромный конфигурационный файл (на этот раз, на две тысячи строк), в котором зашиты названия whois серверов и все остальное.

Основной недостаток тот же самый: всего не захардкодить. Многих whois серверов в конфигурации нет, соответственно о целом ряде доменов получить информацию невозможно. Ну и с «8.8.8.8» программа также не справилась.

Что дальше?

К этому времени у меня уже были определенные идеи касательно того, как должен работать «правильный» whois, и я взялся за разработку начальной версии. Все дальнейшие «знания» были почерпнуты экспериментальным путем в результате множества разнообразных whois запросов и анализа их результатов. К счастью, многое из этого можно было автоматизировать.

Также хочется упомянуть сайт http://whois.domaintools.com — лучший whois веб сервис, который мне удалось найти. Естественно, я не имел возможности видеть его исходный код, однако во многих случаях сравнение его результатов с моими служило хорошей «наводкой». Не буду озвучивать предположения касательно того, как он работает, однако по факту он показывал намного лучшие результаты, чем вышеупомянутые программы (как я уже упоминал, о возможностях Ruby Whois я сужу только по коду).

Работу с whois я бы свел к решению трех принципиальных задач:

Как определить правильный whois сервер для домена?

Для начала несколько замечаний.

Whois информацию возможно получить не для всех доменов верхнего уровня. Некоторые страны whois информацию для своих доменов не предоставляют в принципе (например, КНДР). Кроме того, своих whois серверов не имеют и некоторые африканские страны (возможно, у них просто нет денег или всех программистов съели).

Для некоторых доменов верхнего уровня whois информацию возможно получить только на сайте регистратора. В некоторых случаях для этого необходимо ввести каптчу, в остальных это можно реализовать программно. Тем не менее, я полностью отказался от идеи «scraping-а». Его корректная работа требует хардкода большого количества информации (адрес страницы, имена полей формы, формат полученной HTML страницы и т.п.), чего я всячески хотел избежать. Кроме того, эта информация требует постоянного обновления, так как она может меняться даже чаще, чем имена whois серверов.

Ну и, самое главное, если whois информация будет отображаться посетителям сайта, то можно просто предоставить ссылку на сайт регистратора и дать возможность пользователю заполнить форму самому. В большинстве случаев, whois форма представлена или на заглавной странице, или на страницу с ней можно перейти в один клик. Это намного более надежный способ, чем полагаться на «scraping», который в любом случае не сможет справиться с каптчей. Где взять ссылку на сайт регистратора будет рассказано ниже.

Также некоторые whois серверы могут банить IP адреса пользователей, которые посылают слишком много запросов.

Итак, где же взять название правильного whois сервера?

Взять его можно из нескольких источников:

1. Есть такой замечательный whois сервер whois.iana.org, принадлежащий IANA (http://en.wikipedia.org/wiki/Internet_Assigned_Numbers_Authority). Он содержит самую свежую информацию обо всех доменах верхнего уровня. Например (здесь и далее все примеры с использованием Unix-ового whois):

Обратим внимание на следующие строки:

Это собственно и есть whois сервер и сайт регистратора! Для большинства доменов верхнего уровня IANA возвращает вполне актуальное название whois сервера. Я специально проверял изменения в Ruby Whois за несколько последних месяцев, и все они были взяты именно с whois.iana.org.

В моем модуле я кэширую результат с IANA на 24 часа (на больший промежуток времени особого смысла нет, да и данные могут поменяться).

Несмотря на все сказанное выше, для некоторых доменов верхнего уровня IANA информацию о whois серверах почему-то не предоставляет. Возможно, регистраторы некоторых стран специально их не афишируют. Но не страшно, у нас есть и другие способы.

2. Если присмотреться, для очень многих доменов верхнего уровня названия их whois серверов выглядят или как whois.nic. (более распространено), или как whois. (менее распространено). Например:

Таким образом, если IANA нам ничего не вернула, для любого домена верхнего уровня мы легко получаем названия двух потенциальных whois серверов:

Довольно часто, если мы ищем домен третьего уровня (например, russia.edu.ru), то whois сервер, ответственный за домен верхнего уровня, нужной информации не содержит. Например:

Это происходит из-за того, что за многие домены второго уровня (в нашем примере, edu.ru) ответственна совершенно другая организация, которая имеет свой собственный whois сервер.

В подобных случаях jwhois и Ruby Whois педантично хардкодят название whois сервера для каждого известного им домена второго уровня с собственным сервером. Естественно, уследить за всеми доменами второго уровня абсолютно нереально, тем более что никакого централизованного источника подобной информации нет.

Но опять таки, если присмотреться, большинство таких whois серверов имеют вид whois. (более распространено) или whois.nic. (менее распространено). Например:

В некоторых случаях, когда IANA возвращает только сайт регистратора без whois сервера, название, построенное по этой схеме, оказывается верным.

Таким образом, для каждого домена, который мы хотим найти, у нас будет целый список потенциальных whois серверов с большей или меньшей вероятностью работоспособности. Например, для russia.edu.ru у нас будет:

Такая схема позволяет отфильтровать все несуществующие whois серверы и в то же время не дает надолго заблокировать серверы, которые по тем или иным причинам стали временно недоступны.

Стоит отметить, что когда мы в следующий раз будем искать домен в зоне edu.ru, то активными будут считаться сразу два whois сервера:

Мой модуль ищет ссылки достаточно агрессивно, принимая за whois сервер любую строку, которая выглядит как хостнейм и содержит слово «whois» (как мы уже выяснили, «лишние» whois серверы — не проблема). Если же мы нашли ссылку в формате «whois server: », то название сервера уже не обязательно должно содержать слово «whois» (на практике, это может быть даже не хостнейм, а просто IP адрес). Все найденные whois серверы по умолчанию считается активными.

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

Здесь упоминается whois.jprs.jp, алиасом которого, на самом деле, и является whois.jp. То есть если мы теперь пошлем запрос на whois.jprs.jp, то получим такой же самый результат. Кроме этого, некоторые whois серверы могут работать как прокси и возвращать результаты с какого-то другого whois сервера — естественно, упомянув его имя в результате.

Иными словами, нам нужно каким-то образом выявлять подобные ситуации: во-первых, чтобы не выдавать пользователю два одинаковых результата, а во-вторых, чтобы не тратить время на ненужные запросы.

На первый взгляд, решение элементарное: нужно просто сравнить два результата, и если они одинаковые, второй откинуть (запомнив, что переход между этими двумя whois серверами в дальнейшем делать не нужно). Однако не все так просто. Часто результат содержит точное время, когда был сделан запрос — соответственно, два запроса, сделанные подряд, будут отличаться значением времени. Если первый whois сервер работает как прокси, то он, как правило, будет содержать еще какой-то дополнительный текст. И самое интересное: некоторые whois серверы умудряются от запроса к запросу выдавать данные в разном порядке! То есть результат запросов абсолютно одинаковый, но несколько строк поменяны местами.

Поэтому перед сравнением я заменяю все последовательности цифр на «X», удаляю все пустые строки и строки, которые начинаются с «#» или «%» (комментарии), и, на всякий случай, заменяю множественные пробелы на один и делаю «trim» всем строкам. После этого я сравниваю два множества строк (используя тип set в Python), и если второе является подмножеством первого, значит это дубликат.

С IDN доменами (типа «правительство.рф»), к счастью, никаких проблем нет. Переводим «правительство.рф» в «xn--80aealotwbjpid2k.xn--p1ai» и ищем на whois.iana.org домен верхнего уровня «xn--p1ai»:

Как определить правильный whois сервер для IP адреса?

С IP адресами ситуация несколько другая. Есть пять основных региональных whois серверов:

Если спросить у какого-нибудь регионального сервера про IP адрес, за который он не отвечает, то с определенной вероятностью он сможет указать на нужный сервер, однако далеко не всегда. Поэтому я по очереди опрашиваю все пять региональных whois серверов, а также whois.iana.org, пока кто-то из них не вернет результат или не укажет на нужный whois сервер.

Первый запрос я всегда посылаю на ARIN, так как он отвечает за наибольшее число IP адресов (да и пользователей нашего продукта чаще всего будут интересовать именно IP адреса из Северной Америки). Кроме того, для остальных IP адресов ARIN почти всегда может указать на нужный региональный whois сервер. В большинстве случаев IANA также может указать на правильный сервер, однако в таком случае пришлось бы каждый раз делать минимум по два запроса.

Стоит отметить, что AfriNIC — относительно новый whois сервер. До этого все африканские IP адреса были распределены между ARIN, RIPE и APNIC. Поэтому другие региональные whois серверы часто думают, что эти IP адреса до сих пор им делегированы. Например:

ARIN также скажет, что за 213.154.64.0 отвечает RIPE. Если же обратиться к RIPE, то он ответит, что за диапазон 213.154.64.0 — 213.154.95.255 уже отвечает AfriNIC.

Также стоит помнить про две вещи. whois.lacnic.net работает как прокси, и если про какой-то IP адрес информации не имеет, то отправляет запрос на остальные четыре сервера и, в конечном итоге, возвращает нужный результат. Может показаться, что в таком случае все запросы нужно просто посылать на LACNIC. На самом деле, делать это абсолютно не стоит: два из пяти региональных whois серверов (RIPE и AfriNIC) достаточно агрессивно банят IP адреса пользователей, которые посылают слишком много запросов. Не уверен на счет точных цифр, но 10000 запросов в сутки, думаю, будет достаточно, чтобы оказаться заблокированным AfriNIC. Когда LACNIC посылает запросы на другие региональные серверы, он, естественно, указывает IP пользователя, от имени которого делается запрос. Иными словами, если даже какой-то IP адрес не принадлежит AfriNIC, есть большая вероятность, что LACNIC отправит запрос и на него, тем самым, увеличив счетчик. Поэтому на LACNIC я отправляю запросы в последнюю очередь.

Ссылки на другие whois серверы ищутся так же само, как и для доменов. Правда есть несколько нюансов. ARIN всегда показывает ссылки на дополнительные whois серверы в виде «ReferralServer: ». Если же он за IP адрес не отвечает, но знает, на каком из региональных серверов его нужно искать, то указывать полное название whois сервера он, скорее всего, не будет, а просто ограничится аббревиатурой типа LACNIC или RIPE.

Как правильно отправить запрос?

Итак, с горем пополам, мы наконец-то нашли нужный whois сервер. Как теперь отправить на него запрос?

В подавляющем большинстве случаев нужно просто открыть соединение на порт 43, отправить строку вида » \r\n» и прочитать данные, которые вернет сервер. Однако, как всегда, есть исключения (тут без хардкода, к сожалению, уже не обойтись).

Не смотря на то, что RFC 3912 явно предписывает посылать «\r\n», есть как минимум один whois сервер, который требует «\n» и с «\r\n» работать отказывается! Это whois сервер Мальты whois.nic.org.mt.

Кроме того, следующие whois серверы требуют особый синтаксис:

К whois.arin.org можно посылать запросы и в обычном виде » \r\n», но тогда есть риск получить вместо полного результата вот это:

С whois.nic.name ситуация вообще интересная. Например:

Информации не так уж и много (хотя и лучше, чем ничего). Однако обратите внимание на строку:

Можно отправить такой запрос:

Самого whois сервера регистратора он не показал, но показал адрес сайта:

Как мы уже знаем, в большинстве случаев whois сервер находится где-то неподалеку. Пробуем:

Это, конечно, работает не для всех доменов в зоне «name», но для многих.

Также рекомендую почитать про дополнительный синтаксис региональных whois серверов (детально описан на их сайтах). Я его у себя в модуле не использую, но кому-то может пригодиться. Например, параметр «-B» позволяет whois.ripe.net выводить поля «notify», «changed» и «e-mail», которые по умолчанию не показываются:

В этом примере я использую telnet, так как через Unix-овый whois или другую утилиту передать специальные параметры не удается.

Еще один нюанс связан со считыванием результатов с whois сервера. Первоначально у меня был приблизительно такой код:

Иными словами, читаем данные, пока они есть. Если происходит ошибка, возвращаем пустой результат.

Оказалось, что это работает не всегда (хотя и, наверно, в 99% случаев). Есть whois серверы, которые после отправки данных закрывают соединение таким образом, что на клиенте всегда происходит ошибка (хотя все данные перед этим были успешно прочитаны).

Поэтому код был изменен на:

Наконец, оказалось, что кроме протокола whois, существует еще один, который называется rwhois. О нем речь пойдет ниже.

Referral Whois

Что такое rwhois («Referral Whois») можно прочитать здесь: http://en.wikipedia.org/wiki/Whois#Referral_Whois. В нескольких словах, это протокол, который должен исправить все недостатки стандартного whois и, в конце концов, полностью его заменить. По умолчанию протокол использует порт 4321. Не смотря на то, что rwhois был разработан еще в 1994-м году, широкого распространения он до сих пор так и не получил.

Впервые ссылки на rwhois серверы я увидел в результатах, которые мне возвращал ARIN (хотя подавляющее большинство ссылок по-прежнему вели на обыкновенные whois серверы). Обычно, уже само их название содержало слово «rwhois». Кроме того, в большинстве случаев ARIN явно указывал, какой протокол надо использовать: «whois://» или «rwhois://». Первый же rwhois сервер, к которому я попробовал отправить запрос, показал, что простым » \r\n» тут не обойтись. Пришлось открывать спецификацию.

Referral Whois описан в RFC 2167 (http://tools.ietf.org/html/rfc2167). Это огромный нечитаемый документ на 170КБ. Проглядев его по диагонали, я сразу же вспомнил слова Joel-а Spolsky: «если кто-то дал вам спецификацию для какой-то новой технологии, и вы не можете ее понять, сильно не расстраивайтесь. Никто другой ее тоже не поймет, поэтому это вряд ли имеет значение».

Каких-либо вменяемых примеров в документе не содержалось, Google мне также ничем не смог помочь. Поэтому, повозившись с telnet-ом и окончательно зайдя в тупик, я решил, что это не тот случай, когда нужно изобретать велосипед. На http://projects.arin.net/rwhois/ лежал написанный на C клиент с вполне подходящей GPL v2 лицензией. Свыше 100КБ кода и поддержка rwhois версий 1.0 и 1.5 — самому такое не написать. С теми rwhois серверами, с которыми я зашел в тупик, он блестяще справился. Упомянутый выше jwhois также имел встроенную поддержку rwhois, но вряд ли она была настолько же совершенной (по крайней мене, поддержки разных версий сервера там не было).

В общем, если мой модуль находил rwhois сервер, то просто вызывал через subpocess сторонний rwhois клиент, который брал на себя всю коммуникацию с сервером и возвращал готовый результат.

Радость длилась недолго: оказалось, что с большинством реальных rwhois серверов клиент не работает. Никаких видимых причин для этого не было, однако клиент упрямо возвращал «error querying rwhois server». Google, естественно, ничем помочь не смог. Самое обидное, что jwhois с этими серверами прекрасно справлялся.

Провозившись довольно долго, я, наконец, обнаружил удивительную вещь: все эти «rwhois» серверы на самом деле работают по протоколу обычного whois! Иными словами, мой навороченный клиент соединяется с сервером и думает «интересно, он работает как rwhois версии 1.0 или rwhois версии 1.5?» А сервер на самом деле ничего кроме тупого » \r\n» не понимает! Такой наглости клиент, естественно, не ожидает и выдает ошибку.

Подозреваю, что все эти серверы банально «не осилили» правильно реализовать rwhois протокол и, в конце концов, вернулись к обычному whois, при этом продолжая формально идентифицировать себя как rwhois сервер. Так что Joel Spolsky был абсолютно прав.

На самом деле, кое-что от rwhois у этих серверов все-таки осталось: строго структурированный формат возвращаемых данных. Все разбито на секции, никаких лишних пробелов, имя/значение разделены двоеточием. Rwhois клиент потом трансформировал это в красивую таблицу с табуляцией. Реализовать то же самое в моем модуле заняло всего несколько строк кода.

Теперь, если rwhois клиент для какого-то rwhois сервера выдает ошибку, модуль пробует повторно обратиться к нему как к обычному whois серверу. Если это ему удается, сервер навсегда заносится в список обычных whois серверов.

Как обработать полученный результат?

Самое сложное — это отличить валидный результат от сообщения об ошибке. Задача абсолютно нетривиальная: формат сообщения об ошибке для конкретного whois сервера может быть каким угодно. Алгоритм был придуман и усовершенствован экспериментальным путем. У меня уже был достаточно большой набор валидных результатов от различных whois серверов, получить сообщения об ошибке также не составило труда: достаточно было отправить к каждому известному серверу запрос на несуществующий или некорректный домен или IP адрес (это легко автоматизировалось).

В конце концов, я пришел к следующему:

Если результат получен для IP адреса с одного из пяти региональных whois серверов, то нижеследующие строки точно свидетельствует об ошибке:

Если ARIN вернул нам несколько результатов (например, для 8.8.8.8), то нужно выбрать из них нужный:

Разбиваем результат по #end и #start и выбираем ту часть, которая соответствует наименьшему диапазону (в нашем случае 8.8.8.0 — 8.8.8.255).

Ну и несколько последних штрихов:

1. Удаляем из результата все строки, которые содержат наш собственный IP адрес (многие whois серверы включают его в результат).

2. Удаляем все HTML тэги (некоторые whois серверы любят вставлять их, где не надо).

3. Исправляем кодировку для японских и корейских whois серверов:

Вот как бы и все. Если вы прочитали всю статью, следующий раздел можете смело пропускать.

Короткие итоги

Работа whois протокола описана в RFC 3912 (http://tools.ietf.org/html/rfc3912), содержащем минимум информации и оставляющем whois серверам широкое поле для «самодеятельности». Фактически, все сводится к следующему: открыть TCP соединение на порт 43 к нужному whois серверу, послать запрос в определенном формате, закончить его «\r\n» и получить результат также в определенном формате. Конкретные детали каждый whois сервер определяет по собственному усмотрению. Также не всегда очевидно, откуда взять нужный whois сервер для конкретного домена или IP адреса.

Для получения whois информации существует стандартная Unix-овая утилита «whois», однако она использует очень простой и достаточно устаревший алгоритм, который во многих ситуациях не работает. Среди альтернатив можно выделить jwhois и Ruby Whois — обе программы используют принцип хардкода, работая на основе километровых конфигурационных файлов, которые содержат все известные whois серверы и описание особенностей работы с каждым из них. Такой подход также не всегда работает, кроме того, требует постоянного обновления конфигурации (стоит отметить, что конфигурация jwhois не обновлялась с 2011-го года).

Как показала практика, вполне реально написать свою собственную whois библиотеку, которая будет иметь минимум хардкода, но при этом сможет эффективно определять нужные whois серверы и коммуницировать с ними.

В целом, работа с whois сводится к решению трех принципиальных задач:

Результат, полученный от первого whois сервера, может содержать ссылку на другой whois сервер с дополнительной информацией. Чаще всего, она будет выглядеть как «whois server: », однако в отдельных случаях может выглядеть и по-другому. Здесь нужно не забывать о том, что многие whois серверы бывают доступны под несколькими алиасами, и найденное название может быть не дополнительным whois сервером, а просто другим алиасом первого сервера (на практике, whois серверы часто включают в результат свое название).

С IP адресами ситуация другая. Есть пять основных региональных whois серверов:

Стоит помнить, что whois.ripe.net и whois.afrinic.net могут легко забанить IP адрес, с которого приходит слишком много запросов. Кроме того, whois.lacnic.net работает как прокси и, в случае необходимости, отправляет запросы на все остальные региональные whois серверы (естественно, увеличивая «счетчики» на whois.ripe.net и whois.afrinic.net).

В подавляющем большинстве случаев правильный запрос к whois серверу должен выглядеть как » \r\n», однако некоторые whois серверы требуют другой формат запроса (детали смотреть в разделе «Как правильно отправить запрос?«).

Некоторые whois серверы работают по альтернативному протоколу, который называется rwhois («Referral Whois») и использует порт 4321 (смотреть http://en.wikipedia.org/wiki/Whois#Referral_Whois и http://tools.ietf.org/html/rfc2167). Его реализация достаточно сложна, поэтому для работы с rwhois серверами рекомендуется использовать уже имеющиеся решения (например, http://projects.arin.net/rwhois/). При этом стоит помнить, что многие серверы, которые идентифицируют себя как rwhois, на самом деле работают по протоколу обычного whois! Упомянутый выше rwhois клиент этого не подозревает и выдает ошибку.

Когда результат с whois сервера наконец-то получен, встает задача отличить валидный результат от сообщения об ошибке. На практике сделать это достаточно непросто, так как у разных whois серверов сообщение об ошибке может выглядеть как угодно. Алгоритм, который используется в моем модуле, детально описан в разделе «Как обработать полученный результат?«.

Нужно помнить, что многие whois серверы включают в результат IP адрес, с которого был сделан запрос. Также некоторые whois серверы используют в своих результатах HTML тэги. Большинство whois серверов возвращают результат в кодировке utf8, однако японские и корейские whois серверы используют iso-2022-jp и euc-kr соответственно.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *