Come usare il comando dig su Linux

Una finestra terminale stilizzata su un sistema Linux.
Fatmawati Achmad Zaenuri / Shutterstock

Linux dig Il comando consente di interrogare i server DNS ed eseguire ricerche DNS. Puoi anche trovare il dominio a cui riporta un indirizzo IP. Ti mostreremo come!

Come funziona il comando dig

Le persone usano Linux dig comando per interrogare i server DNS (Domain Name System). dig è l'acronimo di Domain Information Groper. Con dig, è possibile richiedere ai server DNS informazioni relative a vari record DNS, inclusi indirizzi host, scambi di posta, server dei nomi e informazioni correlate. Doveva essere uno strumento per diagnosticare problemi DNS. Tuttavia, puoi usarlo per curiosare e saperne di più sul DNS, che è uno dei sistemi centrali che mantengono il traffico del routing Internet.

Internet utilizza gli indirizzi IP (Internet Protocol) per identificare le “posizioni” sul Web, ma le persone usano i nomi di dominio. Quando si digita un nome di dominio in un'applicazione, come un browser Web o un client SSH, qualcosa deve tradurre dal nome di dominio all'indirizzo IP effettivo. Qui entra in gioco il Domain Name System.

Quando usi un nome di dominio con qualsiasi programma connesso a Internet, il tuo router locale non può risolverlo (a meno che non sia memorizzato nella cache da una richiesta precedente). Pertanto, il router esegue una query sul server DNS del provider di servizi Internet (ISP) o su qualsiasi altro server configurato per l'uso. Questi sono chiamati server precursori DNS.

Se il server DNS ha recentemente ricevuto la stessa richiesta da qualcun altro sullo stesso computer, la risposta potrebbe trovarsi suo cache. In tal caso, invia semplicemente le stesse informazioni al tuo programma.

Se il server precursore DNS non è in grado di individuare il dominio nella sua cache, contatta un server dei nomi radice DNS. Un server root non conterrà le informazioni richieste per risolvere i nomi di dominio in indirizzi IP, ma conterrà elenchi di server che possono aiutarti con la tua richiesta.

Il server principale esamina il dominio di primo livello a cui appartiene il tuo nome di dominio, ad esempio .COM, .ORG, .CO.UK e così via. Invia quindi un elenco dei server di dominio di livello superiore che gestiscono tali tipi di domini al server precursore DNS. Il server precursore DNS può quindi inoltrare nuovamente la richiesta a un server di dominio di livello superiore.

Il server di dominio di livello superiore invia i dettagli del server dei nomi autorevole (dove sono memorizzati i dettagli del dominio) al server precursore DNS. Il server DNS quindi interroga il server dei nomi autorevole che ospita la zona del dominio che hai inserito originariamente nel tuo programma. Il server dei nomi autorevole rimanda l'indirizzo IP al server DNS che, a sua volta, te lo restituisce.

Install dig

dig era già installato sui nostri computer Ubuntu 18.04 e Fedora 30. Tuttavia, abbiamo dovuto installarlo sul computer Manjaro 18.04 con il seguente comando:

sudo pacman -Sy bind-tools

Il comando "sudo pacman -Sy bind-tools" in una finestra del terminale.

Introduzione a scavare

Nel nostro primo esempio, restituiremo gli indirizzi IP associati a un nome di dominio. Spesso, più indirizzi IP sono associati a un singolo nome di dominio. Ciò accade spesso se si utilizza il bilanciamento del carico, ad esempio.

Noi usiamo il +short opzione di query, come mostrato di seguito, che ci dà una risposta concisa:

dig howtogeek.com +short

Il comando "dig howtogeek.com + short" in una finestra del terminale.

Tutti gli indirizzi IP associati al dominio howtogeek.com sono elencati per noi. All'altra estremità dello spettro, se noi non fare Usa il +short opzione di query, l'output è piuttosto dettagliato.

Quindi, digitiamo quanto segue per reindirizzarlo less:

dig howtogeek.com | less

Il comando "dig howtogeek.com | less" in una finestra del terminale.

L'output viene visualizzato in less, come mostrato di seguito.

L'output del comando "dig howtogeek.com | less" in una finestra del terminale.

Ecco l'elenco completo:

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;howtogeek.com. IN A

;; ANSWER SECTION:
howtogeek.com. 3551 IN A 151.101.194.217
howtogeek.com. 3551 IN A 151.101.130.217
howtogeek.com. 3551 IN A 151.101.66.217
howtogeek.com. 3551 IN A 151.101.2.217

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Mar 22 07:44:37 EDT 2020
;; MSG SIZE rcvd: 106

Analizziamo quel pezzo per pezzo.

Intestazione

Innanzitutto, diamo un'occhiata a quello che abbiamo nell'intestazione:

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

Ora, ecco cosa significa tutto ciò:

  • Prima linea: La versione di dig e il dominio richiesto.
  • Opzioni globali: Come vedremo, puoi usare dig per interrogare più domini contemporaneamente. Questa riga mostra le opzioni che sono state applicate a tutte le query del dominio. Nel nostro semplice esempio, era solo il valore predefinito +cmd (comando) opzione.
  • Opcode: query: Questo è il tipo di operazione richiesta che, in questo caso, era a query. Questo valore può anche essere iquery per una query inversa, o status se stai solo testando lo stato del sistema DNS.
  • Stato: Noerror: Non si sono verificati errori e la richiesta è stata risolta correttamente.
  • ID: 12017: Questo ID casuale unisce la richiesta e la risposta.
  • Bandiere: qr rd ra: Questi stanno per query, recursion desired, e recursion available. La ricorsione è una forma di ricerca DNS (l'altra è iterativa). Potresti anche vedere AA, che sta per Risposta autorevole, il che significa che un server dei nomi autorevole ha fornito la risposta.
  • Query: 1: Il numero di query in questa sessione, che era uno.
  • Risposta: 4: Il numero di risposte in questa risposta, che è quattro.
  • Autorità: 0: Il numero di risposte provenienti da un server dei nomi autorevole, che era zero in questo caso. La risposta è stata restituita dalla cache di un server precursore DNS. Non ci sarà una sezione autorevole nella risposta.
  • Aggiuntivo: 1: C'è un pezzo di informazioni aggiuntive. (Stranamente, nulla è elencato a meno che questo valore non sia due o superiore.)

Opt Pseudosection

Successivamente, vediamo quanto segue nella Opt Pseudosection:

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494

Analizziamo questo:

  • EDNS: versione 0: La versione di Extension System per DNS in uso. EDNS trasmette dati e flag estesi estendendo la dimensione dei pacchetti UDP (User Datagram Protocol). Ciò è indicato da un flag di dimensioni variabili.
  • bandiere: Nessuna bandiera in uso.
  • udp: 4096: La dimensione del pacchetto UDP.

Sezione delle domande

Nella sezione Domande, vediamo quanto segue:

;; QUESTION SECTION:
;howtogeek.com. IN A

Ecco cosa significa:

  • howtogeek.com: Il nome di dominio a cui stiamo richiedendo.
  • IN: Stiamo effettuando una query di classe Internet.
  • UN: Salvo diversamente specificato, dig richiederà un record A (indirizzo) dal server DNS.

Sezione di risposta

La sezione Risposta contiene le seguenti quattro risposte che abbiamo ricevuto dal server DNS:

howtogeek.com. 3551 IN A 151.101.194.217
howtogeek.com. 3551 IN A 151.101.130.217
howtogeek.com. 3551 IN A 151.101.66.217
howtogeek.com. 3551 IN A 151.101.2.217

Ecco cosa significano queste risposte:

  • 3551: Questo è il Time to Live (TTL), un intero con segno a 32 bit che contiene l'intervallo di tempo per il quale è possibile memorizzare nella cache un record. Alla scadenza, i dati devono essere utilizzati in una risposta a una richiesta fino a quando non vengono aggiornati dal server DNS.
  • IN: Abbiamo fatto una query di classe su Internet.
  • UN: Abbiamo chiesto un record A dal server DNS.

Sezione statistica

Le statistiche sono la sezione finale e contengono le seguenti informazioni:

;; Query time: 0 msec 
;; SERVER: 127.0.0.53#53(127.0.0.53) 
;; WHEN: Sun Mar 22 07:44:37 EDT 2020 
;; MSG SIZE rcvd: 106

Ecco cosa abbiamo:

  • Tempo query: 0 msec: Il tempo impiegato per ottenere la risposta.
  • SERVER: 127.0.0.53 # 53 (127.0.0.53): L'indirizzo IP e il numero di porta del server DNS che ha risposto. In questo caso, indica il risolutore di stub della cache locale. Ciò inoltra le richieste DNS a qualunque server DNS upstream sia configurato. Sul computer di prova Manajro, l'indirizzo elencato qui era 8.8.8.8 # 53, che è il servizio DNS pubblico di Google.
  • QUANDO: dom 22 mar 07:44:37 EDT 2020: Quando è stata effettuata la richiesta.
  • MSG SIZE rcvd: 106: La dimensione del messaggio ricevuto dal server DNS.

Essere selettivi

Non devi accontentarti dei due estremi di labbra serrate e garrule. Il dig Il comando consente di includere o escludere selettivamente sezioni dai risultati.

Le seguenti opzioni di query rimuoveranno quella sezione dai risultati:

  • + nocomments: Non mostrare le righe dei commenti.
  • + Noauthority: Non mostrare la sezione dell'autorità.
  • + Noadditional: Non mostrare la sezione aggiuntiva.
  • + nostats: Non mostrare la sezione delle statistiche.
  • + NOANSWER: Non mostrare la sezione delle risposte.
  • + Noall: Non mostrare nulla!

Il +noall l'opzione di query è generalmente combinata con una di quelle sopra per includere una sezione nei risultati. Pertanto, invece di digitare una lunga serie di opzioni di query per disattivare più sezioni, è possibile utilizzare +noall per spegnerli tutti.

È quindi possibile utilizzare le seguenti opzioni di query inclusive per riattivare quelle che si desidera visualizzare:

  • + commenti: Mostra righe di commento.
  • + Autorità: Mostra la sezione autorità.
  • + Aggiuntivi: Mostra la sezione aggiuntiva.
  • + statistiche: Mostra la sezione delle statistiche.
  • + Risposta: Mostra la sezione delle risposte.
  • + Tutti: Mostra tutto.

Digitiamo quanto segue per fare una richiesta ed escludere le righe di commento:

dig howtogeek.com +nocomments

Il comando "dig howtogeek.com + nocomments" in una finestra del terminale.

Se usiamo il +noall l'opzione di query da sola, come mostrato di seguito, non otterremo alcun risultato utile:

dig howtogeek.com +noall

Il comando "dig howtogeek.com + noall" in una finestra del terminale.

Possiamo aggiungere selettivamente le sezioni che vogliamo vedere. Per aggiungere la sezione di risposta, digitiamo quanto segue:

dig howtogeek.com +noall +answer

Il comando "dig howtogeek.com + noall + answer" in una finestra del terminale.

Se digitiamo quanto segue per attivare +stats, vedremo anche la sezione delle statistiche:

dig howtogeek.com +noall +answer +stats

Il comando "dig howtogeek.com + noall + answer + stats" in una finestra del terminale.

Il +noall +answer la combinazione è usata spesso. È possibile aggiungere altre sezioni alla riga di comando come richiesto. Se vuoi evitare di scrivere +noall +answer sulla riga di comando ogni volta che lo usi dig, puoi inserirli in un file di configurazione chiamato ".digrc". Si trova nella tua home directory.

Digitiamo quanto segue per crearne uno con echo:

echo "+noall +answer" > $HOME/.digrc

Possiamo quindi digitare quanto segue per verificarne il contenuto:

cat .digrc

I comandi "echo" + noall + answer "> $ HOME / .digrc" e "cat .digrc" in una finestra del terminale.

Queste due opzioni verranno ora applicate a tutti gli usi futuri di dig, come mostrato di seguito:

dig ubuntu.org
dig linux.org
dig github.com

"dig ubuntu.org", "dig linux.org" e "dig github.com" in una finestra del terminale.

Questo dig il file di configurazione verrà utilizzato per gli esempi rimanenti in questo articolo.

Record DNS

Le informazioni restituite al tuo dig le richieste vengono estratte da diversi tipi di record conservati sul server DNS. A meno che non chiediamo qualcosa di diverso, dig richiede il record A (indirizzo). Di seguito sono riportati i tipi di record comunemente utilizzati con dig:

  • Un record: Collega il dominio a un indirizzo IP versione 4.
  • Record MX: Lo scambio di posta registra le e-mail dirette inviate ai domini al server di posta corretto.
  • NS Record: I record del server dei nomi delegano un dominio (o sottodominio) a un set di server DNS.
  • Record TXT: I record di testo memorizzano informazioni basate su testo relative al dominio. In genere, potrebbero essere utilizzati per sopprimere e-mail contraffatte o contraffatte.
  • Record SOA: L'inizio dei record di autorità può contenere molte informazioni sul dominio. Qui puoi trovare il server dei nomi principale, la parte responsabile, un timestamp per le modifiche, la frequenza degli aggiornamenti di zona e una serie di termini per tentativi e abbandoni.
  • TTL: Time to live è un'impostazione per ogni record DNS che specifica per quanto tempo un server precursore DNS può memorizzare nella cache ogni query DNS. Allo scadere del tempo, i dati devono essere aggiornati per le richieste successive.
  • QUALUNQUE: Questo dice dig per restituire ogni tipo di record DNS possibile.

Specificando il tipo di record A non si modifica l'azione predefinita, ovvero eseguire una query sul record dell'indirizzo e ottenere l'indirizzo IP, come mostrato di seguito:

dig redhat.com A

Il comando "dig redhat.com A" in una finestra del terminale.

Per interrogare i record di scambio di posta, utilizziamo il seguente flag MX:

dig yahoo.com MX

Il comando "dig yahoo.com MX" in una finestra del terminale.

Il flag del server dei nomi restituisce il seguente nome dei server dei nomi radice associati al dominio di primo livello:

dig fedora.com NS

Il comando "dig fedora.com NS" in una finestra del terminale.

Per interrogare l'inizio del record di autorità, digitiamo il seguente flag SOA:

dig manjaro.com SOA

Il comando "dig manjaro.com SOA" in una finestra del terminale.

Il flag TTL ci mostrerà il tempo di vivere per i dati nella cache del server DNS. Se facciamo una serie di richieste, vediamo che il tempo di vivere si riduce a nulla, quindi torniamo al suo valore iniziale.

Digitiamo quanto segue:

dig usa.gov TTL

Il comando "dig usa.gov TTL" in una finestra del terminale.

Per vedere i record di testo, digitiamo il flag TX:

dig usa.gov TXT

Il comando "dig usa.gov TXT" in una finestra del terminale.

Specifica del server DNS

Se si desidera utilizzare un determinato server DNS per la propria richiesta, è possibile utilizzare il segno at (@) per passarlo a dig come parametro della riga di comando.

Con il server DNS predefinito (vedi sotto), dig fa riferimento al risolutore di stub della cache locale in 127.0.0.53.

dig usa.gov +stats

Ora digitiamo quanto segue per utilizzare il server DNS pubblico di Google in 8.8.8.8:

dig @8.8.8.8 usa.gov +stats

I comandi "dig usa.gov + stats" e "dig @ 8.8.8.8 usa.gov + stats" in una finestra del terminale.

Utilizzando scavare con più domini

Possiamo passare più domini a dig sulla riga di comando, come mostrato di seguito:

dig ubuntu.org fedora.org manjaro.com

Il comando "dig ubuntu.org fedora.org manjaro.com" in una finestra del terminale.

Se controlli regolarmente una serie di domini, puoi archiviarli in un file di testo e passarlo a dig. Tutti i domini nel file verranno controllati a turno.

Il nostro file si chiama "domains.txt". Useremo cat per mostrare il suo contenuto e quindi passarlo a dig con il -f (file) opzione. Digitiamo quanto segue:

cat domains.txt
dig -f domains.txt

I comandi "cat domains.txt" e "dig -f domains.txt" in una finestra del terminale.

Ricerche DNS inverse

Se hai un indirizzo IP e vuoi sapere dove va, puoi provare una ricerca DNS inversa. Se si risolve in un server registrato con un server DNS, potresti essere in grado di scoprire il suo dominio.

La possibilità di dipendere dalla presenza di un PTR (record pointer). I PTR risolvono un indirizzo IP in un nome di dominio completo. Tuttavia, poiché non sono obbligatori, non sono sempre presenti in un dominio.

Vediamo se riusciamo a scoprire dove ci porta l'indirizzo IP 209.51.188.148. Digitiamo quanto segue, usando il -x (ricerca inversa) opzione:

dig -x 209.51.188.148

Il comando "dig -x 209.51.188.148" in una finestra di terminale.

Presto! L'indirizzo IP si risolve in gnu.org.

Perché un PTR è un record DNS e lo sappiamo dig può richiedere record DNS specifici, non potremmo semplicemente chiedere dig recuperare il PTR per noi? Sì, possiamo, ma ci vuole un po 'più di lavoro.

Dobbiamo fornire l'indirizzo IP in ordine inverso e virata .in-addr.arpa alla fine, come mostrato di seguito:

dig ptr 148.188.51.209.in-addr.arpa

Il comando "dig ptr 148.188.51.209.in-addr.arpa" in una finestra del terminale.

Otteniamo lo stesso risultato; ci è voluto solo un po 'più di sforzo.

Si può scavare?

Tutti usiamo Internet ogni giorno e le menti curiose si sono spesso chieste come la magia accade quando digitiamo il nome di un sito Web in un browser. Con dig, puoi esplorare i processi di evocazione in rete.

Articoli correlati

Ultimi articoli