Як я можу перерахувати ВСІ записи DNS?


188

Чи є спосіб перерахувати ВСІ записи 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
Сервери імен Amazon Route53 не включали TXT, MX та SOA, коли я намагався це зробити. Після того, як я спеціально запитав ці записи, вони там, де вони включені у БУДЬ-які відповіді. Тому візьміть це з зерном солі.
Пітер

Щойно я отримав "відмовлено в зв’язку"
niico

1
Спекуляція ніколи не трактувалася послідовно розрізниками щодо значення БУДЬ-ЯКОГО. Це, безумовно, не означає ВСЕ (є запит на це), хоча деякі (не багато) трактували це саме так. Інші просто скинули кеш, а інші обмежили його певними типами записів. У сучасний час (2016+) більшість провайдерів або відключили БУДЬ-ЯКОГО (або дають на нього марну відповідь), або планують це зробити, оскільки це звичайний драйвер для багатьох атак посилення.
Нік Бастін

1
@NickBastin цей проект ( 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

додайте рядки 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 .


3
Я знаю, що це рішення далеко не ідеальне, але це врятувало мені багато часу, тому сподіваюся, що воно буде корисним комусь іншому.
Заз

додати dig -t txt +nocmd "$1" +noall +answer(та змінити "*.$1"тощо), щоб перевірити записи TXT домену.
Макс

15

host -aпрацює добре, схоже на dig any.

EG:

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

11
Це не відповідає на питання, що полягає в тому, як знайти інші записи в DNS-зоні домену, тобто додатково всі записи для субдоменів. Це не означає, що host -aце не корисна команда, вона просто не робить те, що шукає ОП.
spikyjt

13
  1. Передача в зону - це єдиний спосіб бути впевненим, що у вас є всі записи про піддомен. Якщо DNS правильно налаштований, вам зазвичай не вдається здійснювати передачу зовнішньої зони.

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


12

Для Windows:

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

  1. Запустіть командний рядок Windows, перейшовши до пункту «Пуск»> «Командний рядок» або «Запуск»> «CMD».

  2. Наберіть NSLOOKUP і натисніть Enter. Сервер за замовчуванням встановлений для вашого локального DNS, Адреса буде вашим локальним IP-адресою.

  3. Встановіть тип запису DNS, який потрібно шукати, ввівши, set type=##де ## - тип запису, а потім натисніть Enter. Ви можете використовувати ANY, A, AAAA, A + AAAA, CNAME, MX, NS, PTR, SOA або SRV як тип запису.

  4. Тепер введіть доменне ім'я, яке ви хочете запитувати, а потім натисніть Enter .. У цьому прикладі ми будемо використовувати Managed.com.

  5. Тепер NSLOOKUP поверне записи записів для введеного вами домену.

  6. Ви також можете змінити сервери імен, які ви запитуєте. Це корисно, якщо ви перевіряєте записи до повного розповсюдження DNS. Щоб змінити сервер типу сервера імен [сервер імен]. Замініть [сервер імен] на серверах імен, які ви хочете використовувати. У цьому прикладі ми встановимо їх як NSA.managed.com.

  7. Після зміни змініть тип запиту (крок 3), якщо потрібно, введіть новий домен (крок 4.)

Для Linux:

1) Перевірка записів DNS за допомогою Dig Command Dig підставки для домену інформації groper є гнучким інструментом для допиту серверів імен DNS. Він виконує пошук DNS і відображає відповіді, повернуті з серверів імен, які були запитувані. Більшість адміністраторів DNS використовують dig для вирішення проблем з DNS через його гнучкість, простоту використання та чіткість виводу. Інші інструменти пошуку мають меншу функціональність, ніж копати.

2) Перевірте записи DNS за допомогою команди NSlookup Command Nslookup - це програма для запиту серверів доменних імен Інтернету. Nslookup має два режими інтерактивного та неінтерактивного.

Інтерактивний режим дозволяє користувачеві запитувати сервери імен для інформації про різні хости та домени або друкувати список хостів у домені.

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

3) Перевірка записів DNS за допомогою хосту команд хосту - це проста утиліта для здійснення пошуку DNS. Зазвичай використовується для перетворення імен в IP-адреси та навпаки. Якщо не задано жодних аргументів чи параметрів, хост друкує короткий підсумок аргументів та параметрів його командного рядка.


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

11

Те, що ви хочете, називається перенесенням зони . Ви можете подати запит на передачу зони, використовуючи dig -t axfr.

Зона є областю , і всі домени під ним, не делеговані до іншого сервера.

Зауважте, що передачі зон не завжди підтримуються. Вони не використовуються у звичайному пошуку, лише для реплікації DNS-даних між серверами; але є й інші протоколи, які можуть бути використані для цього (наприклад, rsync over ssh), може виникнути ризик безпеки від викриття імен, а відповіді на передачу зон коштують дорожче для створення та надсилання, ніж звичайні пошукові записи DNS.


1

Немає простого способу отримати всі записи DNS для домену в одному екземплярі. Ви можете переглядати лише певні записи, наприклад, якщо ви хочете переглянути запис A для певного домену, ви можете скористатися командою: dig a (тип запису) domain.com. Це те саме для всіх інших типів записів, які ви хочете бачити для цього домену.

Якщо ви не знайомі з інтерфейсом командного рядка, ви також можете використовувати сайт, наприклад mxtoolbox.com. Який дуже зручний інструмент для отримання записів домену.

Я сподіваюся, що це відповість на ваше запитання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.