2013-10-11 24 views
97

Esiste un modo per elencare TUTTI i record DNS per un dominio?Come posso elencare TUTTI i record DNS?

Conosco cose come dig e nslookup ma si spingono solo oltre. Ad esempio, se ho un sottodominio Un record come

test A somedomain.co.uk 

quindi a meno che non lo chieda espressamente, ad es.

dig any test.somedomain.co.uk 

Non riesco a vederlo.

C'è qualche modo (oltre a guardare i record andando al gestore DNS) per vedere esattamente quali sono tutti i record DNS?

+0

http://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions#Zone_enumeration_issue.2C_controversy.2C_and_NSEC3 – SLaks

risposta

109

Quando si esegue una query per QUALSIASI verrà visualizzato un elenco di tutti i record al livello ma non al di sotto.

# try this 
dig google.com any 

Questo restituirà un record, record TXT, record NS, record MX, ecc se il nome di dominio è esattamente "google.com". Ma non restituirà i record figli (ad es., Www.google.com). Più esattamente, potresti ottenere questi record se esistono. Il name server non deve restituire questi record se sceglie di non farlo (ad esempio, per ridurre la dimensione della risposta).

Un AXFR è un trasferimento di zona ed è probabilmente quello che desideri. Tuttavia, questi sono in genere limitati e non disponibili a meno che non si controlli la zona. Solitamente, effettui un trasferimento di zona direttamente dal server autorevole (il @ ns1.google.com di seguito) e spesso da un server dei nomi che non può essere pubblicato (un server dei nomi invisibile).

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

Se si dispone del controllo della zona, è possibile configurarlo per ottenere trasferimenti protetti con una chiave TSIG. Questo è un segreto condiviso che il client può inviare al server per autorizzare il trasferimento.

+3

Grazie per quello (anche a deltab). Spiegazione molto chiara, a conferma di ciò che sospettavo: è disponibile ma non a me (a meno che non inizi a configurare i miei nameserver). Come mi occupo di molti domini sarebbe stato così bello solo eseguire uno script per ottenere TUTTE le voci DNS. – Ken

+6

I nameserver Route53 di Amazon non includevano TXT, MX e SOA quando ho provato questo. Dopo aver interrogato in modo specifico questi record, essi sono stati inclusi in QUALSIASI risposta. Quindi prendi questo con un granello di sale. – Peter

+0

Ho appena ricevuto "connessione rifiutata" – niico

10

Quello che si desidera è un trasferimento di zona . È possibile richiedere un trasferimento di zona utilizzando dig -t axfr.

A zona è un dominio e tutti i domini sottostanti che non sono delegati a un altro server.

Nota che i trasferimenti di zona non sono sempre supportati. Non vengono utilizzati nella normale ricerca, solo nella replica dei dati DNS tra server; ma ci sono altri protocolli che possono essere usati per questo (come rsync su ssh), potrebbe esserci un rischio per la sicurezza dall'esporre i nomi, e le risposte al trasferimento di zona costano di più per generare e inviare rispetto alle solite ricerche DNS.

11

In assenza della capacità di fare trasferimenti di zona, ho scritto questo piccolo script 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 

Ora uso dg example.com per ottenere una bella lista pulita di record DNS, o dg example.com x per includere un mucchio di altri sottodomini popolari.

grep -vE "${wild_ips}" filtra i record che potrebbero essere il risultato di una voce DNS con caratteri jolly come * 10800 IN A 1.38.216.82. In caso contrario, una voce con caratteri jolly potrebbe apparire come se esistessero record per ogni $COMMON_SUBDOMAN.

Nota: questo si basa sulle query ANY, che sono blocked by some DNS providers such as CloudFlare.

+2

So che questa soluzione è tutt'altro che ideale, ma mi ha risparmiato un sacco di tempo, quindi spero che possa essere utile a qualcun altro. – Zaz

8
  1. Un trasferimento di zona è l'unico modo per essere sicuri di disporre di tutti i record del sottodominio. Se il DNS è configurato correttamente, normalmente non si dovrebbe essere in grado di eseguire un trasferimento di zona esterno.

  2. Il progetto scans.io ha un database di record DNS che è possibile scaricare e cercare sottodomini. Ciò richiede il download del 87GB di dati DNS, in alternativa si può provare la ricerca online dei dati a https://hackertarget.com/find-dns-host-records/

5

host -a funziona bene, simili 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. 
+4

Questo non risponde alla domanda, che è come trovare altri record nella zona DNS di un dominio, vale a dire in aggiunta tutti i record per i sottodomini. Questo non vuol dire che 'host -a' non è un comando utile, semplicemente non fa quello che l'OP sta cercando. – spikyjt

+0

Non ha funzionato per me – bjornl

14

ho migliorato Josh 's risposta. Ho notato che mostra solo le voci già presenti nella cache del server dei nomi interrogato, quindi è meglio estrarre un server dei nomi autorevole dalla SOA (piuttosto che fare affidamento sul server dei nomi predefinito). Ho anche disabilitato il filtraggio degli IP jolly perché di solito sono solitamente più interessato alla correttezza della configurazione.

Il nuovo script prende un argomento -x per l'uscita ampliato e un argomento -s NS scegliere un nameserver specifica: 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 
0

Non v'è alcun modo semplice per ottenere tutti i record DNS per un dominio in un caso. Ad esempio, è possibile visualizzare solo determinati record, se si desidera visualizzare un record A per un determinato dominio, è possibile utilizzare il comando: dig a (type of record) domain.com. Questo è lo stesso per tutti gli altri tipi di record che vuoi vedere per quel dominio.

Se non si ha familiarità con l'interfaccia della riga di comando, è anche possibile utilizzare un sito come mxtoolbox.com. Quale è lo strumento molto utile per ottenere record di un dominio.

Spero che questo risponda alla tua domanda.

Problemi correlati