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



есть ли способ, которым я могу перечислить все записи DNS для домена?



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



test A somedomain.co.uk


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



dig any test.somedomain.co.uk


Я не вижу его.



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

473   7  
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-запросы.

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

  2. 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

    Ничего не найдено.