Как я могу перечислить ВСЕ записи DNS?

189

Можно ли как-нибудь перечислить ВСЕ записи DNS для домена?

Я знаю о таких вещах, как dig и nslookup, но они зашли так далеко. Например, если у меня есть запись субдомена A как

test A somedomain.co.uk

тогда, если я специально не спрашиваю об этом, например.

dig any test.somedomain.co.uk

Я не вижу этого

Есть ли способ (кроме просмотра записей путем перехода к диспетчеру DNS), чтобы точно узнать, что все записи DNS?

кругозор
источник

Ответы:

202

Когда вы запрашиваете ЛЮБОЙ, вы получите список всех записей на этом уровне, но не ниже.

# 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. Это общий секрет, который клиент может отправить на сервер для авторизации передачи.

Денис Филлипс
источник
4
Спасибо за это (также deltab). Очень четкое объяснение, подтверждающее то, что я подозревал - оно доступно, но не мне (если я не начну настраивать свои собственные серверы имен). Поскольку я присматриваю за очень многими доменами, было бы так приятно просто запустить скрипт, чтобы получить ВСЕ записи DNS.
Кен
13
Когда я попробовал это, на серверах имен Route53 от Amazon не было TXT, MX и SOA. После того, как я специально запросил эти записи, они были включены в ЛЮБЫЕ ответы. Так что возьми это с крошкой соли.
Питер
Я только что получил «
Отказ в
1
Специалисты никогда не интерпретировали эту информацию последовательно по смыслу ЛЮБОГО. Это определенно не означает ВСЕ (есть запрос на это), хотя некоторые (не многие) относились к этому так. Другие просто сбрасывали свой кеш, а другие ограничивали его определенными типами записей. В наше время (2016+) большинство провайдеров либо отключили ЛЮБОЙ (или дают бесполезный ответ), либо планируют это сделать, так как это является общим драйвером для многих атак усиления.
Ник Бастин
1
@NickBast в этом проекте ( tools.ietf.org/html/draft-ietf-dnsop-refuse-any-06 ), который в настоящее время находится в работе, пытается ужесточить шаблон ответов для этого типа запроса. Это также обсуждает, почему это / не должно использоваться.
Патрик Мевзек,
29

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

Новый скрипт принимает -xаргумент для расширенного вывода и -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 "$1" in
  --) shift; break ;;
  -x) EXTENDED=y; shift ;;
  -s) NS="$2"; shift 2 ;;
  *) break ;;
esac; done
DOM="$1"; shift
TYPE="${1:-any}"

test "${NS:-}" || NS=$(dig +short  SOA "$DOM" | awk '{print $1}')
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
dan3
источник
добавьте строки dig -t txt +nocmd $NS "$DOM" +noall +answer(и измените $DOM) для проверки записей TXT домена.
Макс
19

Ввиду отсутствия возможности делать зонные переносы, я написал этот небольшой скрипт bash dg:

#!/bin/bash
COMMON_SUBDOMAINS=(www mail smtp pop imap blog en ftp ssh login)
if [[ "$2" == "x" ]]; then
    dig +nocmd "$1" +noall +answer "${3:-any}"
    wild_ips="$(dig +short "*.$1" "${3:-any}" | tr '\n' '|')"
    wild_ips="${wild_ips%|}"
    for sub in "${COMMON_SUBDOMAINS[@]}"; do
        dig +nocmd "$sub.$1" +noall +answer "${3:-any}"
    done | grep -vE "${wild_ips}"
    dig +nocmd "*.$1" +noall +answer "${3:-any}"
else
    dig +nocmd "$1" +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 .

Zaz
источник
3
Я знаю, что это решение далеко от идеала, но оно сэкономило мне много времени, поэтому я надеюсь, что оно будет полезным для кого-то еще.
Zaz
добавить dig -t txt +nocmd "$1" +noall +answer(и изменить на "*.$1"и т. д.), чтобы проверить записи TXT домена.
Макс
15

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.
Datavar
источник
11
Это не отвечает на вопрос о том, как найти другие записи в зоне DNS домена, т.е. дополнительно все записи для поддоменов. Это не host -aзначит, что это бесполезная команда, она просто не выполняет то, что ищет OP.
spikyjt
13
  1. Передача зоны - единственный способ убедиться, что у вас есть все записи поддоменов. Если DNS настроен правильно, вы обычно не сможете выполнять передачу во внешнюю зону.

  2. Проект scans.io имеет базу данных DNS-записей, которые можно загружать и искать на поддоменах. Это требует загрузки 87 ГБ данных DNS, или вы можете попробовать онлайн поиск данных по адресу https://hackertarget.com/find-dns-host-records/

squizzy99
источник
12

Для Windows:

Может возникнуть необходимость проверить состояние записей DNS ваших доменов или проверить серверы имен, чтобы узнать, какие записи запрашивают серверы.

  1. Запустите командную строку Windows, перейдя в Пуск> Командная строка или через Выполнить> CMD.

  2. Введите NSLOOKUP и нажмите Enter. Сервер по умолчанию настроен на ваш локальный DNS, адрес будет вашим локальным IP.

  3. Установите тип записи DNS, который вы хотите найти, набрав set type=##где ## - тип записи, затем нажмите Enter. Вы можете использовать ЛЮБОЙ, A, AAAA, A + AAAA, CNAME, MX, NS, PTR, SOA или SRV в качестве типа записи.

  4. Теперь введите доменное имя, которое вы хотите запросить, затем нажмите Enter. В этом примере мы будем использовать Managed.com.

  5. NSLOOKUP теперь возвращает записи записей для домена, который вы ввели.

  6. Вы также можете изменить серверы имен, к которым вы обращаетесь. Это полезно, если вы проверяете записи до того, как DNS полностью распространился. Для изменения сервера имен введите server [name server]. Замените [сервер имен] теми серверами имен, которые вы хотите использовать. В этом примере мы установим их как NSA.managed.com.

  7. После изменения измените тип запроса (Шаг 3), если необходимо, затем введите новый домен (Шаг 4).

Для Linux:

1) Проверка записей DNS с помощью команды Dig. Dig - это универсальный инструмент для запроса DNS-серверов имен. Он выполняет поиск DNS и отображает ответы, которые были возвращены с серверов имен, которые были запрошены. Большинство администраторов DNS используют dig для устранения проблем DNS из-за своей гибкости, простоты использования и четкости вывода. Другие инструменты поиска, как правило, имеют меньше функциональности, чем копать.

2) Проверка записей DNS с помощью команды NSlookup Nslookup - это программа для запроса серверов имен доменов в Интернете. Nslookup имеет два режима: интерактивный и неинтерактивный.

Интерактивный режим позволяет пользователю запрашивать у серверов имен информацию о различных хостах и ​​доменах или распечатывать список хостов в домене.

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

3) Проверка записей DNS с помощью Host Command host - это простая утилита для выполнения поиска DNS. Обычно он используется для преобразования имен в IP-адреса и наоборот. Если аргументы или параметры не указаны, хост выводит краткую сводку аргументов и параметров командной строки.

Кервин Л
источник
Это отлично работает для меня в Windows 7, но в Windows 10, похоже, глючит, вот что я использовал для отладки записи TXT в Windows 10: nslookup -querytype = txt yourdomainnamehere.com
Кодер
11

То, что вы хотите, называется зонной передачей . Вы можете запросить передачу зоны, используя dig -t axfr.

Зона является областью , и все домены под ним, не делегированные к другому серверу.

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

deltab
источник
1

Нет простого способа получить все записи DNS для домена в одном экземпляре. Например, вы можете просматривать только определенные записи, если вы хотите просмотреть запись A для определенного домена, вы можете использовать команду: dig (тип записи) domain.com. Это относится ко всем другим типам записей, которые вы хотите видеть для этого домена.

Если вы не знакомы с интерфейсом командной строки, вы также можете использовать сайт, такой как mxtoolbox.com. Это очень удобный инструмент для получения записей домена.

Надеюсь, это ответит на ваш вопрос.

Майк Фраанье
источник