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

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

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

test A somedomain.co.uk

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

dig any test.somedomain.co.uk

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

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

10 ответов

Решение

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

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

Я улучшил ответ Zaz. Я заметил что 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

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.

Ввиду отсутствия возможности делать зонные переносы, я написал этот небольшой скрипт 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.

Для Windows:

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

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

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

  3. Установите тип записи DNS, который вы хотите найти, набрав set type=## где ## - тип записи, затем нажмите Enter. Вы можете использовать A, AAAA, A+AAAA, ANY, 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 с помощью команды NS lookup Nslookup - это программа для запроса серверов имен доменов в Интернете. Nslookup имеет два режима: интерактивный и неинтерактивный.

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

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

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

  1. Передача зон - единственный способ убедиться, что у вас есть все записи поддоменов. Если DNS настроен правильно, вы обычно не сможете выполнять передачу во внешнюю зону.

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

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

Зона - это домен и все домены под ним, которые не делегированы другому серверу.

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

Многие DNS-серверы отклоняют запросы типа "ЛЮБОЙ". Таким образом, единственный способ - запросить каждый тип индивидуально. К счастью, есть сайты, которые делают это проще. Например, https://www.nslookup.io по умолчанию показывает самые популярные типы записей и поддерживает все существующие типы записей.

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

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

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

      dig @8.8.8.8 example.domain any

перечислит все записи DNS. Здесь 8.8.8.8 это DNS от Google.

Другие вопросы по тегам