Проверьте доступность домена - избегайте переднего запуска - используя подстановочные знаки или регулярное выражение - PullRequest
0 голосов
/ 08 мая 2020

Я могу проверить наличие индивидуального домена через whois abc123.com.

Не могу понять, как проверить доступность целого набора доменов, соответствующих критериям , например XXX YYY. Z. где X - любые 3 одинаковых буквы, Y - любые 3 одинаковых числа, а Z - любое из com, org или io. Например, aaa111.org

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

Я могу выполнить такое сопоставление строк с помощью Regex, но я не знаю, как применить это к сценарию оболочки.

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

whois abc.com | grep "No match" здесь полезно, потому что оно пусто, если этот домен не зарегистрирован; может быть, это могло быть включено в сценарий или что-то в этом роде. он также сокращает вывод до одной строки, а не до горы мусора, который whois выводит по умолчанию.

Мы были бы признательны за скрипт, который работает с bash, zsh или fi sh.

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

...

Редактировать в ответ на комментарий: Я не привязан к аспекту решения «whois», а только к возможности проверки с помощью регулярного выражения или шаблона. - Edit 2: whois оказался необходим, чтобы избежать ложных срабатываний; ответ был изменен, чтобы включить этот аспект.

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Вот пример реализации с использованием DNS-запросов и Whois только при отсутствии SOA записи:

#!/usr/bin/env bash

for z in {com,org,io}; do
  for y in {0..9}; do
    for x in {a..z}; do

      # Compose domain as xxxyyy.z
      domain="$x$x$x$y$y$y.$z"

      # If domain has no SOA DNS record, chances are it is available.
      if [ -z "$(dig +keepopen +short -q "$domain" -t SOA)" ]; then

        # To be sure a domain without SOA DNS record is really available:
        # check it has no whois record either
        if ! whois "$domain" >/dev/null; then
          printf 'Domain %s is available\n' "$domain"
        else
          printf 'Domain %s has no DNS SOA but has a whois record\n' "$domain"
        fi
      else
        printf 'An SOA record exist for domain %s.\nIt may not be available.\n' "$domain"
      fi
    done
  done
done

Пример первых строк вывода:

Domain aaa000.com has no DNS SOA but has a whois record
An SOA record exist for domain bbb000.com.
It may not be available.
An SOA record exist for domain ccc000.com.
It may not be available.
Domain ddd000.com has no DNS SOA but has a whois record
An SOA record exist for domain eee000.com.
It may not be available.
An SOA record exist for domain fff000.com.
It may not be available.
An SOA record exist for domain ggg000.com.
It may not be available.

Пожалуйста, не делайте это ниже:

Я не могу понять, как проверить доступность всего набора доменов, которые соответствуют критериям , например XXX YYY. Z . где X - любые 3 буквы, Y - любые 3 цифры, а Z - любое из com, org или io.

Причина: это будет означать тестирование доступности 52728000 отдельных доменных имен, нереальное c количество запросов даже для служб DNS, а не служб Whois.

arithmeti c позади:

  • XXX где X - любые 3 буквы: 26 букв → 26 × 26 × 26 = 17576 комбинаций
  • YYY где Y - любые 3 числа: 10 чисел → 10 × 10 × 10 = 1000 комбинаций
  • Z, где Z - любое из com, org или io: 3 TLD → 3 комбинации

XXXYYY.Z: 17576 × 1000 × 3 → 52728000 комбинаций

Давайте посчитаем этот объем доменов с использованием циклов, а не целых Bash выражений в квадратных скобках для их генерации, потому что он не поместится в памяти только с квадратными скобками :

#!/usr/bin/env bash

for Z in {com,org,io}; do
  for YYY in {0..9}{0..9}{0..9}; do
    for XXX in {a..z}{a..z}{a..z}; do
      printf '%s%s.%s\n' "$XXX" "$YYY" "$Z"
    done
  done
done
1 голос
/ 18 мая 2020

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

Существует по крайней мере один возможный ярлык (с использованием файлов зон), но ваш вопрос недостаточно подробен, чтобы быть уверенным, что он подходит, но см. ниже. Это может работать лучше / быстрее, чем использование DNS, в зависимости от вашего варианта использования. У него есть свои преимущества и недостатки.

Я рассмотрю также другие моменты, чтобы взглянуть на вещи в перспективе, и мой ответ будет общим c (применимо к нескольким TLD и разными способами). Но это не даст вам готового сценария, который можно было бы просто использовать, поскольку оба эти веб-сайта не являются доской для письма, и ваша проблема с некоторыми указанными c ограничениями слишком велика.

Я выиграл ' t повторить решение, основанное на DNS-запросах, как оно уже было дано, даже если полученный ответ может быть улучшен (вам абсолютно необходимо обратиться к серверам имен реестра, а не к рекурсивным!)

RDAP

Сначала небольшая скобка: в настоящее время, особенно в gTLD, RDAP должен стать новым стандартом. Это намного лучше, чем whois, поскольку он работает по протоколу JSON по протоколу HTTPS и позволяет получать обратно структурированные данные. Он также включает различие между поиском и запросом, которого нет в whois (в некоторых реестрах есть «проверка доступности домена», например, с помощью finger; для этого был протокол IETF, называемый IRIS D-CHK, но это было самое большее реализуется двумя реестрами и сжимается XML через UDP, так и не получил поддержки).

См. RF C 7480 §4 :

Клиенты используйте метод GET для получения тела ответа и используйте метод
HEAD для определения наличия данных на сервере.

Пример:

$ curl --head https://rdap.verisign.com/com/v1/domain/stackoverflow.com
HTTP/1.1 200 OK
Content-Length: 2264
Content-Type: application/rdap+json
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=15768000; includeSubDomains; preload

$ curl --head https://rdap.verisign.com/com/v1/domain/stackoverflow-but-does-not-exist.com
HTTP/1.1 404 Not Found
Content-Type: application/rdap+json
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=15768000; includeSubDomains; preload

(если вы это сделаете a GET в первом случае, вы получите документ JSON, который вы можете обработать с помощью jq или аналогичного).

Обратите внимание, что «частичный поиск» запечен внутри этого нового протокола, см. 4.1. Частичный поиск по строке . Это очень простой случай, а не регулярное выражение: вы можете просто использовать подстановочный знак. Конечно, RDAP-серверы реестра не обязаны его реализовывать. и в меньшей степени Протокол доступа к регистрационным данным (RDAP) Возможности обратного поиска

Подробнее о RDAP:

Итак, даже если вы примените решение DNS, тогда whois, Я по-прежнему настоятельно рекомендую вам перейти на DNS, а затем на RDAP. Предупреждение: серверы RDAP нескольких реестров и регистраторов в настоящее время плохо себя ведут / не соблюдают спецификацию. Это будет исправлено в будущем, когда вступит в силу соблюдение требований ICANN и RDAP действительно начнет затмевать whois.

API регистраторов

Различные регистраторы предоставляют вам доступ к API, который будет включать поиск для доступных доменных имен и / или получения списка доменных имен (например, удаление имен и т. д. c.). То, что предоставляет каждый регистратор, и при каких ограничениях, конечно, будут разные, поэтому невозможно ответить вам там. Но для любого серьезного исследования это будет первой остановкой: go к предпочтительному регистратору и спросите его, какие услуги он может оказать вам в вашем случае.

Очевидно, это будет зависеть от того, какой TLD является регистратором. аккредитован в: регистраторы, аккредитованные в реестре, имеют действующий канал, не открытый c - с использованием протокола под названием EPP - для проверки существования доменных имен.

массовый доступ к Whois

Это существует, но есть практически невозможно использовать. Что касается gTLD, регистраторы заключают договор с ICANN. Если вы прочитаете их контракт , вы увидите следующее:

3.3.6 [..] Регистратор предоставляет третьей стороне массовый доступ к данным, к которым будет предоставлен доступ c в соответствии с Подразделом 3.3.1, на следующих условиях:

3.3.6.1 Регистратор должен сделать полную электронную c копию данные доступны не реже одного (1) раза в неделю для загрузки третьими сторонами, которые заключили соглашение о массовом доступе с Регистратором.

3.3.6.2 Регистратор может взимать ежегодную плату, не превышающую 10 000 долларов США, для такого массового доступа к данным.

Итак, теоретически вы можете go каждому регистратору и запрашивать его у провайдера «массовый доступ к Whois», что означает более или менее полный дамп данных, но:

  • , как написано в контракте выше, это может быть дорогостоящим (существует более 1000 регистраторов, и, поскольку вы не можете заранее знать, где зарегистрирован домен, вам необходимо получить все)
  • данные не будут бесплатными sh
  • что касается файлов зоны ниже, это не живой запрос / ответ, вам нужно будет загрузить все l данные, хранить их, обрабатывать и использовать.

Zonefiles (gTLD)

Опять же, это в основном относится к gTLD по причинам, изложенным сразу после, но см. следующий раздел для других случаях.

Это не позволяет вам выполнять запросы в реальном времени, поскольку вам нужно загружать данные (один раз в день, если вы хотите sh), хранить их где-нибудь в своей инфраструктуре и в формате, который актуально для запросов, которые вам нужно выполнить после (РСУБД может быть здесь не лучшим хранилищем).

Но это «самое простое» и самое широкое решение вашей проблемы.

Согласно их Согласно контракту с ICANN, все реестры gTLD обязаны предоставлять бесплатный доступ к своим файлам зон. Файл зоны будет содержать все опубликованные доменные имена в данном TLD. Это подмножество всех зарегистрированных имен (сложно сказать, сколько, но в диапазоне одного di git процента, если даже так), потому что вы можете зарегистрировать доменные имена без серверов имен (следовательно, они не публикуются) или домен может быть приостановлен по разным причинам и, следовательно, исчезнуть из файла зоны. Таким образом, вы получите такое же количество ложноотрицательных результатов, как и при использовании живых DNS-запросов: вы не получите никаких данных (фактически NXDOMAIN) для некоторых доменов, но на самом деле они зарегистрированы (и, следовательно, снова не доступны для регистрации).

Итак, все начинается здесь: https://www.icann.org/resources/pages/czds-2014-03-03-en и раздел помощи для пользователей: https://czds.icann.org/help

Вам нужно будет создать учетную запись, подписать договор в нем описывается, что вы можете и чего не можете делать с этими данными, а затем вы сможете загружать ежедневные файлы зон для каждого TLD. Большинство, если не все gTLD, помещают туда свои файлы зон. Возможно, некоторые из них работают по-другому, поэтому вам нужно будет выполнить поиск.

Файл зоны будет в формате DNS «master zonefile». Так вы увидите в них записи DNS. Вам нужно обработать только «NS», и вы увидите все доменные имена. Вам нужно будет их нормализовать (регистр, конечная точка и т. Д. c.), Поскольку содержимое может варьироваться от одного файла к другому.

Если у вас есть ежедневный список доменных имен, вы можете примените любой инструмент, который вы хотите найти в них, включая регулярные выражения. Однако будьте осторожны с ограничениями ЦП и ОЗУ, которые вы можете создать, в зависимости от того, как вы храните данные. Необработанный файл зоны .com, например, имеет размер 13 ГБ.

По сравнению с живыми DNS-запросами, самый большой недостаток заключается в том, что он не работает (данные могут быть старше 24 часов), и вам необходимо загрузить файлы прежде чем вы сможете делать все, что захотите, но самым большим преимуществом является то, что у вас есть список «всех» доменов локально, поэтому вы можете применять гораздо более мощные инструменты для поиска в них.

Zonefiles (не gTLD)

За пределами gTLD, то есть в ccTLD, редко доступны полные файлы зон, потому что многие операторы ccTLD считают, что это проприетарные или общедоступные данные, и что никто не имеет действительного бизнеса, получающего их, поэтому они недоступны .

Есть, однако, примеры счетчиков:

  • хотя сейчас у меня нет примеров, но я почти уверен, что некоторые ccTLD все еще могут разрешать доступ к зонным файлам (подлежит определению)
  • также иногда случается, что некоторые серверы имен настроены неправильно и, следовательно, принимают ответы DNS AXFR, что означает, в основном, загрузку файла зоны
  • некоторые реестры имеют инициативу «открытых данных», поэтому вы можете получить список всех доменных имен, но может быть устаревшим через несколько месяцев. AFNI C (.fr) является одним из таких случаев: https://www.afnic.fr/en/about-afnic/news/general-news/9522/show/opendata-data-from-the-fr-tld-to-serve-innovation.html
  • некоторые реестры публикуют sh как «новые домены за последние 24 часа» или что-то подобное. Если вы загружаете список «регулярно», в какой-то момент вы получаете все данные. Опять же, AFNI C делает это: https://www.afnic.fr/en/products-and-services/services/daily-list-of-registered-domain-names/ (даже если это изображение, а не текстовый список, но это никому не мешает получать из него реальные данные)

PS: творческое использование поисковых систем (см., Например, модификатор site:) также может помочь; конечно, они видят только существующие веб-сайты, и доменное имя может быть полностью зарегистрировано, но без разрешения веб-сайта на нем.

...