Wie kann ich ALLE DNS-Einträge auflisten?

188

Kann ich ALLE DNS-Einträge für eine Domain auflisten?

Ich kenne solche Dinge wie dig und nslookup, aber sie gehen nur so weit. Zum Beispiel, wenn ich einen Subdomain-A-Datensatz als habe

test A somedomain.co.uk

dann, wenn ich nicht ausdrücklich danach frage, z.

dig any test.somedomain.co.uk

Ich kann es nicht sehen

Gibt es eine Möglichkeit (außer die Einträge zu überprüfen, indem Sie zum DNS-Manager gehen), um genau zu sehen, was alle DNS-Einträge sind?

Ken
quelle

Antworten:

202

Wenn Sie nach ANY fragen, erhalten Sie eine Liste aller Datensätze auf dieser Ebene, jedoch nicht darunter.

# try this
dig google.com any

Dies kann A-Datensätze, TXT-Datensätze, NS-Datensätze, MX-Datensätze usw. zurückgeben, wenn der Domainname genau "google.com" lautet. Es werden jedoch keine untergeordneten Datensätze zurückgegeben (z. B. www.google.com). Genauer gesagt, Sie können diese Datensätze erhalten, wenn sie vorhanden sind. Der Nameserver muss diese Datensätze nicht zurückgeben, wenn er dies nicht möchte (z. B. um die Größe der Antwort zu verringern).

Ein AXFR ist eine Zonenübertragung und wahrscheinlich das, was Sie wollen. Diese sind jedoch normalerweise eingeschränkt und nur verfügbar, wenn Sie die Zone steuern. Normalerweise führen Sie eine Zonenübertragung direkt vom autorisierenden Server (@ ns1.google.com unten) und häufig von einem Nameserver durch, der möglicherweise nicht veröffentlicht wird (einem Stealth-Nameserver).

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

Wenn Sie die Kontrolle über die Zone haben, können Sie sie so einrichten, dass Übertragungen abgerufen werden, die mit einem TSIG-Schlüssel geschützt sind. Dies ist ein gemeinsames Geheimnis, das der Client an den Server senden kann, um die Übertragung zu autorisieren.

Denis Phillips
quelle
4
Danke dafür (auch an Deltab). Sehr klare Erklärung, die bestätigt, was ich vermutet hatte - es ist verfügbar, aber nicht für mich (es sei denn, ich beginne, meine eigenen Nameserver einzurichten). Da ich mich um sehr viele Domains kümmere, wäre es so schön gewesen, nur ein Skript auszuführen, um ALLE DNS-Einträge zu erhalten.
Ken
13
Die Route53-Nameserver von Amazon enthielten TXT, MX und SOA nicht, als ich dies versuchte. Nachdem ich diese Aufzeichnungen speziell abgefragt hatte, wurden sie in JEDEN Antworten enthalten. Also nimm das mit einem Körnchen Salz.
Peter
Ich habe gerade "Verbindung abgelehnt"
Niico
1
Die Spezifikation wurde von Resolvern nie konsistent hinsichtlich der Bedeutung von ANY interpretiert. Es bedeutet definitiv nicht ALLES (es gibt eine Anfrage dafür), obwohl einige (nicht viele) es so behandelt haben. Andere haben ihren Cache einfach gelöscht, andere haben ihn auf bestimmte Datensatztypen beschränkt. In der heutigen Zeit (2016+) haben die meisten Anbieter entweder JEDES deaktiviert (oder eine nutzlose Antwort gegeben) oder planen dies, da dies der häufigste Treiber für viele Verstärkungsangriffe ist.
Nick Bastin
1
@NickBastin Dieser Entwurf ( tools.ietf.org/html/draft-ietf-dnsop-refuse-any-06 ), der derzeit in Arbeit ist, versucht, das Muster der Antworten für diesen Abfragetyp zu verschärfen. Es wird auch besprochen, warum es verwendet wird / nicht verwendet werden sollte.
Patrick Mevzek
29

Ich habe Joshs Antwort verbessert . Ich habe festgestellt, dass dignur Einträge angezeigt werden, die bereits im Cache des abgefragten Nameservers vorhanden sind. Daher ist es besser, einen autorisierenden Nameserver aus der SOA zu ziehen (anstatt sich auf den Standard-Nameserver zu verlassen). Ich habe auch die Filterung von Platzhalter-IPs deaktiviert, da ich normalerweise mehr an der Richtigkeit des Setups interessiert bin.

Das neue Skript verwendet ein -xArgument für die erweiterte Ausgabe und ein -s NSArgument für die Auswahl eines bestimmten Nameservers: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
quelle
Fügen Sie Zeilen hinzu dig -t txt +nocmd $NS "$DOM" +noall +answer(und ändern Sie die $DOM), um die TXT-Datensätze einer Domäne zu überprüfen.
Max vor
19

Da es nicht möglich war, Zonentransfers durchzuführen, schrieb ich dieses kleine Bash-Skript 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

Jetzt verwende ich dg example.com, um eine schöne, saubere Liste von DNS-Einträgen zu erhalten oder dg example.com xum eine Reihe anderer beliebter Subdomains einzuschließen.

grep -vE "${wild_ips}"filtert Einträge heraus, die das Ergebnis eines Platzhalter-DNS-Eintrags sein könnten, wie z * 10800 IN A 1.38.216.82. Andernfalls würde ein Platzhaltereintrag den Eindruck erwecken, als gäbe es für jeden Datensatz Datensätze$COMMON_SUBDOMAN .

Hinweis: Dies hängt von ANYAbfragen ab, die von einigen DNS-Anbietern wie CloudFlare blockiert werden .

Zaz
quelle
3
Ich weiß, dass diese Lösung alles andere als ideal ist, aber sie hat mir viel Zeit gespart, und ich hoffe, dass sie für andere nützlich sein wird.
Zaz
Hinzufügen dig -t txt +nocmd "$1" +noall +answer(und Ändern "*.$1"usw.), um die TXT-Einträge einer Domäne zu überprüfen.
Max vor
15

host -afunktioniert gut, ähnlich wie dig any.

Z.B:

$ 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
quelle
11
Dies beantwortet nicht die Frage, wie andere Einträge in der DNS-Zone einer Domain zu finden sind, dh zusätzlich alle Einträge für Subdomains. Das heißt nicht, dass host -aes kein nützlicher Befehl ist, es macht einfach nicht das, wonach das OP sucht.
Spikyjt
13
  1. Eine Zonenübertragung ist der einzige Weg, um sicherzustellen, dass Sie über alle Subdomain-Datensätze verfügen. Wenn der DNS korrekt konfiguriert ist, sollten Sie normalerweise keine externe Zonenübertragung durchführen können.

  2. Das scans.io- Projekt verfügt über eine Datenbank mit DNS-Einträgen, die heruntergeladen und nach Subdomains durchsucht werden können. Dazu müssen die 87 GB DNS-Daten heruntergeladen werden. Alternativ können Sie die Online-Suche der Daten unter https://hackertarget.com/find-dns-host-records/ durchführen.

squizzy99
quelle
12

Für Windows:

Möglicherweise müssen Sie den Status der DNS-Einträge Ihrer Domain überprüfen oder die Nameserver überprüfen, um festzustellen, welche Einträge die Server abrufen.

  1. Starten Sie die Windows-Eingabeaufforderung, indem Sie zu Start> Eingabeaufforderung oder über Ausführen> CMD navigieren.

  2. Geben Sie NSLOOKUP ein und drücken Sie die Eingabetaste. Der Standardserver ist auf Ihr lokales DNS eingestellt. Die Adresse ist Ihre lokale IP.

  3. Legen Sie den DNS-Eintragstyp fest, nach dem Sie suchen möchten, indem Sie Folgendes eingeben set type=## und dann die Eingabetaste drücken. Sie können ANY, A, AAAA, A + AAAA, CNAME, MX, NS, PTR, SOA oder SRV als Datensatztyp verwenden.

  4. Geben Sie nun den Domainnamen ein, den Sie abfragen möchten, und drücken Sie die Eingabetaste. In diesem Beispiel verwenden wir Managed.com.

  5. NSLOOKUP gibt nun die Datensatzeinträge für die von Ihnen eingegebene Domain zurück.

  6. Sie können auch die Nameserver ändern, die Sie abfragen. Dies ist nützlich, wenn Sie die Einträge überprüfen, bevor sich DNS vollständig verbreitet hat. Um den Nameserver zu ändern, geben Sie server [Nameserver] ein. Ersetzen Sie [Nameserver] durch die Nameserver, die Sie verwenden möchten. In diesem Beispiel legen wir diese als NSA.managed.com fest.

  7. Ändern Sie nach dem Ändern bei Bedarf den Abfragetyp (Schritt 3) und geben Sie eine neue neue Domain ein (Schritt 4).

Für Linux:

1) Überprüfen von DNS-Einträgen mit Dig Command Dig steht für Domain Information Groper und ist ein flexibles Tool zum Abfragen von DNS-Nameservern. Es führt DNS-Suchvorgänge durch und zeigt die Antworten an, die von den abgefragten Nameservern zurückgegeben wurden. Die meisten DNS-Administratoren verwenden dig, um DNS-Probleme aufgrund seiner Flexibilität, Benutzerfreundlichkeit und Klarheit der Ausgabe zu beheben. Andere Suchwerkzeuge haben tendenziell weniger Funktionen als dig.

2) Überprüfen von DNS-Einträgen mit dem NSlookup-Befehl Nslookup ist ein Programm zum Abfragen von Internetdomänennamenservern. Nslookup verfügt über zwei interaktive und nicht interaktive Modi.

Im interaktiven Modus kann der Benutzer Nameserver nach Informationen zu verschiedenen Hosts und Domänen abfragen oder eine Liste der Hosts in einer Domäne drucken.

Im nicht interaktiven Modus werden nur der Name und die angeforderten Informationen für einen Host oder eine Domain gedruckt. Es ist ein Netzwerkadministrationstool, mit dem sie DNS-Probleme überprüfen und beheben können.

3) Überprüfen von DNS-Einträgen mit Host Command host ist ein einfaches Dienstprogramm zum Durchführen von DNS-Suchvorgängen. Es wird normalerweise verwendet, um Namen in IP-Adressen umzuwandeln und umgekehrt. Wenn keine Argumente oder Optionen angegeben sind, druckt der Host eine kurze Zusammenfassung seiner Befehlszeilenargumente und -optionen.

Kervin L.
quelle
Dies funktionierte perfekt für mich in Windows 7, scheint aber in Windows 10 fehlerhaft zu sein. Dies ist, was ich verwendet habe, um einen TXT-Datensatz in Windows 10 zu debuggen: nslookup -querytype = txt yourdomainnamehere.com
The Coder
11

Was Sie wollen, wird als Zonenübertragung bezeichnet . Sie können eine Zonenübertragung mit anfordern dig -t axfr.

Eine Zone ist eine Domäne und alle Domänen darunter, die nicht an einen anderen Server delegiert sind.

Beachten Sie, dass Zonentransfers nicht immer unterstützt werden. Sie werden nicht bei der normalen Suche verwendet, sondern nur beim Replizieren von DNS-Daten zwischen Servern. Es gibt jedoch auch andere Protokolle, die dafür verwendet werden können (z. B. rsync over ssh). Das Offenlegen von Namen kann ein Sicherheitsrisiko darstellen, und das Generieren und Senden von Zonenübertragungsantworten kostet mehr als das Generieren und Senden von DNS-Lookups.

Deltab
quelle
1

Es gibt keine einfache Möglichkeit, alle DNS-Einträge für eine Domain in einer Instanz abzurufen. Sie können beispielsweise nur bestimmte Datensätze anzeigen. Wenn Sie einen A-Datensatz für eine bestimmte Domain anzeigen möchten, können Sie den folgenden Befehl verwenden: dig a (Typ des Datensatzes) domain.com. Dies gilt auch für alle anderen Arten von Datensätzen, die Sie für diese Domain anzeigen möchten.

Wenn Sie mit der Befehlszeilenschnittstelle nicht vertraut sind, können Sie auch eine Site wie mxtoolbox.com verwenden. Dies ist ein sehr praktisches Tool zum Abrufen von Aufzeichnungen einer Domain.

Ich hoffe das beantwortet deine Frage.

Mike Fraanje
quelle