C'è un modo per elencare TUTTI i record DNS di un dominio?
Conosco cose come dig e nslookup, ma vanno solo fino a un certo punto. Per esempio, se ho un record A del sottodominio come
test A somedomain.co.uk
allora, a meno che non lo chieda specificamente, ad es.
dig any test.somedomain.co.uk
Non posso vederlo.
C'è un modo (oltre a guardare i record andando nel gestore DNS) per vedere esattamente quali sono tutti i record DNS?
Quando fai una query per ANY otterrai una lista di tutti i record a quel livello ma non sotto.
# try this
dig google.com any
Questo può restituire record A, record TXT, record NS, record MX, ecc. se il nome di dominio è esattamente "google.com". Tuttavia, non restituirà i record figli (ad esempio, www.google.com). Più precisamente, POTETE ottenere questi record se esistono. Il name server non è obbligato a restituire questi record se sceglie di non farlo (per esempio, per ridurre la dimensione della risposta).
Un AXFR è un trasferimento di zona ed è probabilmente quello che volete. Tuttavia, questi sono tipicamente limitati e non disponibili a meno che tu non controlli la zona. Di solito si effettua un trasferimento di zona direttamente dal server autoritativo (il @ns1.google.com sotto) e spesso da un server di nomi che potrebbe non essere pubblicato (un server di nomi stealth).
# This will return "Transfer failed"
dig @ns1.google.com google.com axfr
Se hai il controllo della zona, puoi impostarla per ottenere trasferimenti protetti da una chiave TSIG. Questo è un segreto condiviso che il client può inviare al server per autorizzare il trasferimento.
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 popolari sottodomini.
grep -vE "${wild_ips}"
filtra i record che potrebbero essere il risultato di una voce DNS jolly come * 10800 IN A 1.38.216.82
. Altrimenti, una voce jolly farebbe sembrare che ci siano record per ogni $COMMON_SUBDOMAN
.
Nota: Questo si basa su query ANY
, che sono bloccate da alcuni provider DNS come CloudFlare.
Quello che vuoi è chiamato trasferimento di zona. Puoi richiedere un trasferimento di zona usando dig -t axfr
.
Una zona è un dominio e tutti i domini sottostanti che non sono delegati ad un altro server.
Nota che i trasferimenti di zona non sono sempre supportati. Non sono usati nella normale ricerca, solo per replicare i dati DNS tra i server; ma ci sono altri protocolli che possono essere usati per questo (come rsync su ssh), ci può essere 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 normali ricerche DNS.