Jak mogę wyświetlić WSZYSTKIE rekordy DNS?

188

Czy jest jakiś sposób, aby wyświetlić WSZYSTKIE rekordy DNS dla domeny?

Wiem o takich rzeczach jak wykopaliska i nslookup, ale idą one tylko tak daleko. Na przykład, jeśli mam rekord subdomeny A jako

test A somedomain.co.uk

wtedy chyba, że ​​wyraźnie o to poproszę, np.

dig any test.somedomain.co.uk

Nie widzę tego

Czy jest jakiś sposób (poza przeglądaniem rekordów, przechodząc do menedżera DNS), aby zobaczyć dokładnie, jakie są wszystkie rekordy DNS?

Rozpoznać
źródło

Odpowiedzi:

202

Gdy zapytasz o DOWOLNY, otrzymasz listę wszystkich rekordów na tym poziomie, ale nie poniżej.

# try this
dig google.com any

Może to zwrócić rekordy A, rekordy TXT, rekordy NS, rekordy MX itp., Jeśli nazwa domeny to dokładnie „google.com”. Jednak nie zwróci rekordów potomnych (np. Www.google.com). Mówiąc dokładniej, MOŻESZ uzyskać te rekordy, jeśli istnieją. Serwer nazw nie musi zwracać tych rekordów, jeśli zdecyduje się tego nie robić (na przykład, aby zmniejszyć rozmiar odpowiedzi).

AXFR to transfer strefowy i prawdopodobnie jest to, czego chcesz. Są one jednak zazwyczaj ograniczone i niedostępne, chyba że kontrolujesz strefę. Zwykle przeprowadzasz transfer strefy bezpośrednio z autorytatywnego serwera (@ ns1.google.com poniżej), a często z serwera nazw, który może nie zostać opublikowany (serwer nazw ukrytych).

# This will return "Transfer failed"
dig @ns1.google.com google.com axfr

Jeśli masz kontrolę nad strefą, możesz ją skonfigurować, aby otrzymywać przelewy chronione kluczem TSIG. Jest to wspólny sekret, który klient może wysłać na serwer w celu autoryzacji transferu.

Denis Phillips
źródło
4
Dzięki za to (także do deltab). Bardzo jasne wyjaśnienie, potwierdzające to, co podejrzewałem - jest dostępne, ale nie dla mnie (chyba że zacznę konfigurować własne serwery nazw). Gdy opiekuję się wieloma domenami, byłoby miło uruchomić skrypt, aby uzyskać WSZYSTKIE wpisy DNS.
Ken
13
Serwery nazw Route53 w Amazon nie zawierały TXT, MX i SOA, kiedy próbowałem tego. Po tym, jak konkretnie przeszukałem te rekordy, zostały one uwzględnione w DOWOLNEJ odpowiedzi. Więc weź to z odrobiną soli.
Peter
Właśnie dostałem „odmowę połączenia”
niico
1
Specyfikacja nigdy nie była interpretowana konsekwentnie przez przeliczniki co do znaczenia DOWOLNEJ. To na pewno nie oznacza WSZYSTKIEGO (jest taka prośba), chociaż niektórzy (nieliczni) traktowali to w ten sposób. Inni po prostu zrzucili swoją pamięć podręczną, a inni ograniczyli ją do niektórych typów rekordów. W dzisiejszych czasach (2016+) większość dostawców albo WYŁĄCZYŁA KAŻDĄ (lub udzieliła bezużytecznej odpowiedzi), albo planuje to zrobić, ponieważ jest to wspólny motor wielu ataków wzmacniających.
Nick Bastin
1
@NickBastin w tej wersji roboczej ( tools.ietf.org/html/draft-ietf-dnsop-refuse-any-06 ) obecnie w pracy próbuje zaostrzyć wzór odpowiedzi dla tego typu zapytania. Omówiono również, dlaczego jest / nie powinien być używany.
Patrick Mevzek,
29

Poprawiłem odpowiedź Josha . Zauważyłem, że digpokazuje tylko wpisy już obecne w pamięci podręcznej serwera nazw, dlatego lepiej jest pobrać autorytatywny serwer nazw z SOA (zamiast polegać na domyślnym serwerze nazw). Wyłączyłem również filtrowanie adresów IP z symbolami wieloznacznymi, ponieważ zwykle bardziej interesuje mnie poprawność konfiguracji.

Nowy skrypt pobiera -xargument dla rozszerzonego wyjścia i -s NSargument, aby wybrać konkretny serwer nazw: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
źródło
dodaj wiersze dig -t txt +nocmd $NS "$DOM" +noall +answer(i zmodyfikuj $DOM), aby sprawdzić rekordy TXT domeny.
Max
19

Wobec braku możliwości wykonywania transferów stref napisałem ten mały skrypt 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

Teraz używam, dg example.comaby uzyskać ładną, czystą listę rekordów DNS lub dg example.com xdołączyć kilka innych popularnych subdomen.

grep -vE "${wild_ips}"odfiltrowuje rekordy, które mogą być wynikiem wieloznacznego wpisu DNS, takiego jak * 10800 IN A 1.38.216.82. W przeciwnym razie wpis z symbolem wieloznacznym sprawiłby, że wyglądałoby to tak, jakby były rekordy dla każdego $COMMON_SUBDOMAN.

Uwaga: zależy to od ANYzapytań, które są blokowane przez niektórych dostawców DNS, takich jak CloudFlare .

Zaz
źródło
3
Wiem, że to rozwiązanie jest dalekie od ideału, ale zaoszczędziło mi dużo czasu, więc mam nadzieję, że przyda się komuś innemu.
Zaz
dodaj dig -t txt +nocmd "$1" +noall +answer(i zmodyfikuj do "*.$1"itp.), aby sprawdzić rekordy TXT domeny.
Max
15

host -adziała dobrze, podobnie jak dig any.

NA PRZYKŁAD:

$ 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
źródło
11
To nie odpowiada na pytanie, jak znaleźć inne rekordy w strefie DNS domeny, tj. Dodatkowo wszystkie rekordy dla poddomen. To nie znaczy, że host -anie jest to przydatne polecenie, po prostu nie robi tego, czego szuka OP.
spikyjt
13
  1. Transfer strefy to jedyny sposób, aby upewnić się, że masz wszystkie rekordy poddomeny. Jeśli DNS jest poprawnie skonfigurowany, zwykle nie można wykonać transferu strefy zewnętrznej.

  2. Projekt scans.io ma bazę danych rekordów DNS, które można pobierać i wyszukiwać w poszukiwaniu poddomen. Wymaga to pobrania 87 GB danych DNS, alternatywnie możesz spróbować wyszukać dane online pod adresem https://hackertarget.com/find-dns-host-records/

squizzy99
źródło
12

Dla Windowsa:

Może być konieczne sprawdzenie stanu rekordów DNS domen lub sprawdzenie serwerów nazw, aby zobaczyć, które rekordy pobierają serwery.

  1. Uruchom wiersz polecenia systemu Windows, przechodząc do Start> Wiersz polecenia lub przez Uruchom> CMD.

  2. Wpisz NSLOOKUP i naciśnij Enter. Domyślny serwer jest ustawiony na lokalny DNS, Adres będzie Twoim lokalnym adresem IP.

  3. Ustaw typ rekordu DNS, który chcesz wyszukać, wpisując set type=##gdzie ## jest typem rekordu, a następnie naciśnij Enter. Możesz użyć DOWOLNEGO, A, AAAA, A + AAAA, CNAME, MX, NS, PTR, SOA lub SRV jako typu rekordu.

  4. Teraz wprowadź nazwę domeny, którą chcesz zapytać, a następnie naciśnij Enter. W tym przykładzie użyjemy Managed.com.

  5. NSLOOKUP zwróci teraz wpisy rekordów dla wprowadzonej domeny.

  6. Możesz także zmienić serwery nazw, o które pytasz. Jest to przydatne, jeśli sprawdzasz rekordy przed pełną propagacją DNS. Aby zmienić serwer nazw typu serwer [serwer nazw]. Zamień [serwer nazw] na serwery nazw, których chcesz używać. W tym przykładzie ustawimy je jako NSA.managed.com.

  7. Po zmianie zmień typ zapytania (krok 3), jeśli to konieczne, a następnie wprowadź nową domenę (krok 4.)

W systemie Linux:

1) Sprawdź rekordy DNS za pomocą polecenia Dig Kop Dig oznacza domenę. Groper to elastyczne narzędzie do przesłuchiwania serwerów nazw DNS. Wykonuje wyszukiwanie DNS i wyświetla odpowiedzi, które są zwracane z serwerów nazw, które zostały zapytane. Większość administratorów DNS używa dig do rozwiązywania problemów z DNS ze względu na jego elastyczność, łatwość użycia i przejrzystość danych wyjściowych. Inne narzędzia wyszukiwania mają zwykle mniejszą funkcjonalność niż kopanie.

2) Sprawdź rekordy DNS za pomocą polecenia NSlookup Nslookup to program do sprawdzania serwerów nazw domen internetowych. Nslookup ma dwa tryby interaktywny i nieinteraktywny.

Tryb interaktywny pozwala użytkownikowi zapytać serwery nazw o informacje na temat różnych hostów i domen lub wydrukować listę hostów w domenie.

Tryb nieinteraktywny służy do drukowania tylko nazwy i żądanych informacji o hoście lub domenie. To narzędzie do administrowania siecią, które pomoże im sprawdzić i rozwiązać problemy związane z DNS.

3) Sprawdź rekordy DNS Korzystanie z hosta Polecenie hosta to proste narzędzie do wyszukiwania DNS. Zwykle służy do konwersji nazw na adresy IP i odwrotnie. Gdy nie podano argumentów ani opcji, host drukuje krótkie podsumowanie argumentów i opcji wiersza poleceń.

Kervin L.
źródło
Działa to doskonale dla mnie w systemie Windows 7, ale wydaje się być wadliwe w systemie Windows 10, właśnie tego użyłem do debugowania rekordu TXT w systemie Windows 10: nslookup -querytype = txt twojadomena.com.com
The Coder
11

To, co chcesz, nazywa się przeniesieniem strefy . Możesz poprosić o transfer strefy za pomocą dig -t axfr.

Strefa jest domena i wszystkich domen pod nią, które nie zostały przekazane innym serwerze.

Pamiętaj, że transfery stref nie zawsze są obsługiwane. Nie są używane podczas normalnego wyszukiwania, tylko do replikacji danych DNS między serwerami; ale istnieją inne protokoły, które mogą być do tego użyte (takie jak rsync over ssh), może istnieć ryzyko bezpieczeństwa związane z ujawnieniem nazw, a odpowiedzi transferu strefy generują i wysyłają więcej niż zwykłe wyszukiwania DNS.

deltab
źródło
1

Nie ma łatwego sposobu na uzyskanie wszystkich rekordów DNS dla domeny w jednym wystąpieniu. Możesz przeglądać tylko niektóre rekordy, na przykład, jeśli chcesz wyświetlić rekord A dla określonej domeny, możesz użyć polecenia: wykop (typ rekordu) domena.com. To samo dotyczy wszystkich innych rodzajów rekordów, które chcesz zobaczyć dla tej domeny.

Jeśli nie znasz interfejsu wiersza poleceń, możesz także skorzystać z witryny takiej jak mxtoolbox.com. To bardzo przydatne narzędzie do uzyskiwania rekordów domeny.

Mam nadzieję, że to odpowiada na twoje pytanie.

Mike Fraanje
źródło