Как я могу перечислить все записи DNS?
есть ли способ, которым я могу перечислить все записи DNS для домена?
Я знаю о таких вещах, как dig и nslookup, но они только заходят так далеко. Например, если у меня есть поддомен Запись Как
test A somedomain.co.uk
тогда, если я специально не попрошу об этом, например.
dig any test.somedomain.co.uk
Я не вижу его.
есть ли способ (кроме просмотра записей, перейдя в диспетчер DNS), чтобы точно увидеть, что все записи DNS?
7 ответов:
при запросе любого вы получите список всех записей на этом уровне, но не ниже.
# try this dig google.com anyЭто может возвращать записи A, записи TXT, записи NS, записи MX и т. д., Если доменное имя точно "google.com Однако он не будет возвращать дочерние записи (например, www.google.com точнее, вы можете получить эти записи, если они существуют. Сервер имен не должен возвращать эти записи, если он не хочет этого делать (например, чтобы уменьшить размер ответ.)
AXFR - это передача зоны и, вероятно, то, что вы хотите. Однако они обычно ограничены и недоступны, если вы не контролируете зону. Обычно вы проводите передачу зоны непосредственно с авторитетного сервера (@ns1.google.com ниже) и часто с сервера имен, который не может быть опубликован (скрытый сервер имен).
# This will return "Transfer failed" dig @ns1.google.com google.com axfrЕсли у вас есть контроль над зоной, вы можете настроить его, чтобы получить передачи, которые защищены с помощью ключа TSIG. Это общий секрет клиент может отправить на сервер для авторизации передачи.
я улучшил Джош'ы ответ. Я заметил, что
digпоказывает только записи, уже присутствующие в кэше запрашиваемого сервера имен, поэтому лучше вытащить авторитетный сервер имен из SOA (а не полагаться на сервер имен по умолчанию). Я также отключил фильтрацию подстановочных IP-адресов, потому что обычно меня больше интересует правильность настройки.новый скрипт принимает
-xаргумент для расширенного вывода и A-s NSаргумент к выберите конкретный сервер имен:dig -x example.com#!/bin/bash set -e; set -u COMMON_SUBDOMAINS="www mail mx a.mx smtp pop imap blog en ftp ssh login" EXTENDED="" while :; do case "" in --) shift; break ;; -x) EXTENDED=y; shift ;; -s) NS=""; shift 2 ;; *) break ;; esac; done DOM=""; shift TYPE="${1:-any}" test "${NS:-}" || NS=$(dig +short SOA "$DOM" | awk '{print }') test "$NS" && NS="@$NS" if test "$EXTENDED"; then dig +nocmd $NS "$DOM" +noall +answer "$TYPE" wild_ips=$(dig +short "$NS" "*.$DOM" "$TYPE" | tr '\n' '|') wild_ips="${wild_ips%|}" for sub in $COMMON_SUBDOMAINS; do dig +nocmd $NS "$sub.$DOM" +noall +answer "$TYPE" done | cat #grep -vE "${wild_ips}" dig +nocmd $NS "*.$DOM" +noall +answer "$TYPE" else dig +nocmd $NS "$DOM" +noall +answer "$TYPE" fi
в отсутствие возможности делать зональные передачи, я написал этот небольшой скрипт bash,
dg:#!/bin/bash COMMON_SUBDOMAINS=(www mail smtp pop imap blog en ftp ssh login) if [[ "" == "x" ]]; then dig +nocmd "" +noall +answer "${3:-any}" wild_ips="$(dig +short "*." "${3:-any}" | tr '\n' '|')" wild_ips="${wild_ips%|}" for sub in "${COMMON_SUBDOMAINS[@]}"; do dig +nocmd "$sub." +noall +answer "${3:-any}" done | grep -vE "${wild_ips}" dig +nocmd "*." +noall +answer "${3:-any}" else dig +nocmd "" +noall +answer "${2:-any}" fiтеперь я использую
dg example.comчтобы получить хороший, чистый список записей DNS, илиdg example.com xчтобы включить кучу других популярных поддоменов.
grep -vE "${wild_ips}"отфильтровывает записи, которые могут быть результатом записи DNS с подстановочными знаками, например* 10800 IN A 1.38.216.82. В противном случае запись с подстановочным знаком будет выглядеть так, как будто для каждого$COMMON_SUBDOMAN.Примечание: это зависит от
ANYзапрос заблокировано некоторыми поставщиками DNS, такими как CloudFlare.
что вы хотите называется передача зоны. Вы можете запросить передачу зоны с помощью
dig -t axfr.A зоны - это домен и все домены под ним, которые не делегированы на другой сервер.
обратите внимание, что передача зоны не всегда поддерживается. Они не используются в обычном поиске, только при репликации данных DNS между серверами; но есть и другие протоколы, которые могут быть использованы для этого (например, rsync через ssh), может быть безопасность риск от предоставления имен и ответов на передачу зоны стоит больше для создания и отправки, чем обычные DNS-запросы.
передача зоны-это единственный способ убедиться, что у вас есть все записи поддомена. Если DNS настроен правильно, вы обычно не сможете выполнить внешнюю передачу зоны.
The scans.io проект имеет базу данных DNS записей, которые могут быть загружены и искать поддомены. Это требует загрузки 87GB данных DNS, в качестве альтернативы вы можете попробовать онлайн-поиск данных по адресу https://hackertarget.com/find-dns-host-records/
host -aработает хорошо, какdig any.например:
$ host -a google.com Trying "google.com" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10403 ;; flags: qr rd ra; QUERY: 1, ANSWER: 18, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;google.com. IN ANY ;; ANSWER SECTION: google.com. 1165 IN TXT "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all" google.com. 53965 IN SOA ns1.google.com. dns-admin.google.com. 2014112500 7200 1800 1209600 300 google.com. 231 IN A 173.194.115.73 google.com. 231 IN A 173.194.115.78 google.com. 231 IN A 173.194.115.64 google.com. 231 IN A 173.194.115.65 google.com. 231 IN A 173.194.115.66 google.com. 231 IN A 173.194.115.67 google.com. 231 IN A 173.194.115.68 google.com. 231 IN A 173.194.115.69 google.com. 231 IN A 173.194.115.70 google.com. 231 IN A 173.194.115.71 google.com. 231 IN A 173.194.115.72 google.com. 128 IN AAAA 2607:f8b0:4000:809::1001 google.com. 40766 IN NS ns3.google.com. google.com. 40766 IN NS ns4.google.com. google.com. 40766 IN NS ns1.google.com. google.com. 40766 IN NS ns2.google.com.
нет простого способа получить все записи DNS для домена в одном экземпляре. Вы можете просматривать только определенные записи например, если вы хотите увидеть запись A для определенного домена вы можете использовать команду: dig a (тип записи) domain.com это то же самое для всех других типов записей, которые вы хотите видеть для этого домена.
Если вы не знакомы с интерфейсом командной строки, вы также можете использовать сайт, как mxtoolbox.com. который является очень удобным инструментом для получения записей домен.
Я надеюсь, что это ответ на ваш вопрос.
Comments