Come utilizzare il comando dig su Linux

Pubblicato: 2022-01-29
Una finestra di terminale stilizzata su un sistema Linux.
Fatmawati Achmad Zaenuri/Shutterstock

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

Come funziona il comando dig

Le persone usano il comando dig di Linux per interrogare i server DNS (Domain Name System). dig è l'acronimo di Domain Information Groper. Con dig , puoi interrogare i server DNS per informazioni riguardanti vari record DNS, inclusi indirizzi host, scambi di posta, server dei nomi e informazioni correlate. Doveva essere uno strumento per la diagnosi di problemi DNS. Tuttavia, puoi usarlo per curiosare e saperne di più sul DNS, che è uno dei sistemi centrali che mantiene il traffico di 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 essere tradotto dal nome di dominio all'indirizzo IP effettivo. È qui che entra in gioco il Domain Name System.

Quando utilizzi 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). Quindi, il tuo router interroga il server DNS del tuo provider di servizi Internet (ISP) o qualsiasi altro che hai configurato per l'uso del tuo sistema. Questi sono chiamati server precursori DNS.

Se il server DNS ha ricevuto di recente la stessa richiesta da qualcun altro sullo stesso computer, la risposta potrebbe essere nella sua cache. In tal caso, invia semplicemente le stesse informazioni al tuo programma.

Se il server precursore DNS non riesce a 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.

Annuncio pubblicitario

Il server principale esamina il dominio di primo livello a cui appartiene il tuo nome di dominio, come .COM, .ORG, .CO.UK e così via. Invia quindi un elenco dei server di dominio di primo livello che gestiscono quei tipi di domini al server precursore DNS. Il server precursore DNS può quindi inoltrare la sua richiesta ancora una volta a un server di dominio di primo livello.

Il server di dominio di primo livello invia i dettagli del server dei nomi autorevole (dove sono archiviati 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 originariamente inserito nel tuo programma. Il server dei nomi autorevole invia l'indirizzo IP al server DNS, che a sua volta lo rimanda a te.

Installazione 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 

Iniziare con dig

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

Usiamo l'opzione +short , come mostrato di seguito, che ci dà una risposta concisa:

 dig howtogeek.com +breve 

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

Annuncio pubblicitario

Quindi, digitiamo quanto segue per eseguire il pipe through less :

 scava howtogeek.com | meno 

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

Ecco l'elenco completo:

 ; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com
;; opzioni globali: +cmd
;; Ho risposta:
;; ->>HEADER<<- codice operativo: QUERY, stato: NOERROR, id: 12017
;; flag: qr rd ra; DOMANDA: 1, RISPOSTA: 4, AUTORITÀ: 0, AGGIUNTIVA: 1

;; OPZIONE PSEUDOSEZIONE:
; EDNS: versione: 0, flag:; udp: 65494
;; SEZIONE DOMANDA:
;howtogeek.com. IN UN

;; SEZIONE RISPOSTA:
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

;; Tempo di interrogazione: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; QUANDO: dom 22 marzo 07:44:37 EDT 2020
;; MSG SIZE rcvd: 106

Analizziamo quel pezzo per pezzo.

Intestazione

Per prima cosa, diamo un'occhiata a ciò che abbiamo nell'intestazione:

 ; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com
;; opzioni globali: +cmd
;; Ho risposta:
;; ->>HEADER<<- codice operativo: QUERY, stato: NOERROR, id: 12017
;; flag: qr rd ra; DOMANDA: 1, RISPOSTA: 4, AUTORITÀ: 0, AGGIUNTIVA: 1

Ora, ecco cosa significa tutto ciò:

  • Prima riga: la versione di dig e il dominio richiesto.
  • Opzioni globali: come vedremo, puoi utilizzare dig per interrogare più domini contemporaneamente. Questa riga mostra le opzioni che sono state applicate a tutte le query di dominio. Nel nostro semplice esempio, era solo l'opzione predefinita +cmd (comando).
  • Opcode: Query: questo è il tipo di operazione richiesta che, in questo caso, era una query . Questo valore può anche essere una 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 lega insieme la richiesta e la risposta.
  • Flag: qr rd ra: 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 una.
  • 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 in questo caso era zero. La risposta è stata restituita dalla cache di un server precursore DNS. Non ci sarà alcuna sezione autorevole nella risposta.
  • Aggiuntivo: 1: C'è un'informazione aggiuntiva. (Stranamente, non viene elencato nulla a meno che questo valore non sia due o superiore.)

Opt Pseudosezione

Successivamente, vediamo quanto segue nella Pseudosezione Opt:

 ;; OPZIONE PSEUDOSEZIONE:
; EDNS: versione: 0, flag:; udp: 65494

Analizziamolo:

  • EDNS: versione 0: la versione di Extension System per DNS utilizzata. EDNS trasmette dati e flag estesi estendendo la dimensione dei pacchetti UDP (User Datagram Protocol). Questo è indicato da un flag di dimensioni variabili.
  • flags: nessun flag è in uso.
  • udp : 4096: la dimensione del pacchetto UDP.

Sezione Domande

Nella sezione Domanda, vediamo quanto segue:

 ;; SEZIONE DOMANDA:
;howtogeek.com. IN UN

Ecco cosa significa:

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

Sezione Risposte

La sezione Risposte 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 un record può essere memorizzato nella cache. 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 Internet.
  • A: Abbiamo chiesto un record A dal server DNS.

Sezione Statistica

La statistica è la sezione finale e contiene le seguenti informazioni:

 ;; Tempo di interrogazione: 0 msec 
;; SERVER: 127.0.0.53#53(127.0.0.53) 
;; QUANDO: dom 22 marzo 07:44:37 EDT 2020 
;; MSG SIZE rcvd: 106

Ecco cosa abbiamo:

  • Query Time: 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, punta al risolutore di stub della cache locale. Questo inoltra le richieste DNS a qualsiasi server DNS upstream configurato. Sul computer di prova Manajro, l'indirizzo qui elencato era 8.8.8.8#53, che è il servizio DNS pubblico di Google.
  • QUANDO: dom 22 marzo 07:44:37 EDT 2020: quando è stata presentata la richiesta.
  • MSG SIZE rcvd: 106: la dimensione del messaggio ricevuto dal server DNS.

Essere Selettivi

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

Le seguenti opzioni di query rimuoveranno quella sezione dai risultati:

  • +nocomments: non mostra le righe di commento.
  • +noauthority: non mostra la sezione autorità.
  • +noadditional: non mostra la sezione aggiuntiva.
  • +nostats: non mostra la sezione delle statistiche.
  • +nessuna risposta: non mostra la sezione delle risposte.
  • +noall: non mostrare nulla!
Annuncio pubblicitario

L'opzione di query +noall è solitamente combinata con una di quelle sopra per includere una sezione nei risultati. Quindi, invece di digitare una lunga stringa di opzioni di query per disattivare più sezioni, puoi usare +noall per disattivarle tutte.

Puoi quindi utilizzare le seguenti opzioni di query inclusive per riattivare quelle che desideri visualizzare:

  • +commenti: mostra le righe di commento.
  • +autorità: mostra la sezione autorità.
  • +aggiuntivo: mostra la sezione aggiuntiva.
  • +statistiche: mostra la sezione delle statistiche.
  • +risposta: mostra la sezione delle risposte.
  • +tutti: mostra tutto.

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

 dig howtogeek.com +nocomments 

Se utilizziamo l'opzione di query +noall da sola, come mostrato di seguito, non otterremo alcun output utile:

 dig howtogeek.com +noall 

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

 dig howtogeek.com +noall +risposta 

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

 dig howtogeek.com +noall +risposta +statistiche 

Annuncio pubblicitario

La +noall +answer viene usata spesso. È possibile aggiungere altre sezioni alla riga di comando secondo necessità. Se vuoi evitare di digitare +noall +answer sulla riga di comando ogni volta che 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 +risposta" > $HOME/.digrc

Possiamo quindi digitare quanto segue per verificarne il contenuto:

 gatto .digrc 

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

 scavare su ubuntu.org
 scavare linux.org
 scava github.com 

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

record DNS

Le informazioni restituite alle tue richieste di dig vengono estratte da diversi tipi di record conservati sul server DNS. A meno che non chiediamo qualcosa di diverso, dig interroga 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.
  • Record NS: i record del server dei nomi delegano un dominio (o sottodominio) a un insieme 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 della zona e una serie di limiti di tempo per i tentativi e gli 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. Trascorso tale tempo, i dati devono essere aggiornati per le richieste successive.
  • ANY: Questo dice a dig di restituire ogni tipo di record DNS possibile.
Annuncio pubblicitario

Specificando il tipo di record A non cambia l'azione predefinita, che consiste nell'interrogare il record dell'indirizzo e ottenere l'indirizzo IP, come mostrato di seguito:

 dig redhat.com A 

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

 dig yahoo.com MX 

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 

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

 dig manjaro.com SOA 

Il flag TTL ci mostrerà il tempo di permanenza dei dati nella cache del server DNS. Se facciamo una serie di richieste, vediamo che il tempo di vita si riduce a zero, per poi tornare al valore iniziale.

Digitiamo quanto segue:

 dig usa.gov TTL 

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

 dig usa.gov TXT 

Specificare il server DNS

Se desideri utilizzare un particolare server DNS per la tua richiesta, puoi utilizzare il segno di chiocciola ( @ ) per passarlo a dig come parametro della riga di comando.

Annuncio pubblicitario

Con il server DNS predefinito (vedi sotto), dig fa riferimento al risolutore stub della cache locale a 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 

Utilizzo di dig con più domini

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

 dig ubuntu.org fedora.org manjaro.com 

Se controlli regolarmente un insieme 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 mostrarne il contenuto, quindi lo passeremo a dig con l'opzione -f (file). Digitiamo quanto segue:

 domini gatto.txt
 dig -f domains.txt 

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.

Annuncio pubblicitario

Se puoi dipende dalla presenza di un PTR (pointer record). I PTR risolvono un indirizzo IP in un nome di dominio completo. Tuttavia, poiché questi non sono obbligatori, non sono sempre presenti su un dominio.

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

 scavare -x 209.51.188.148 

Presto! L'indirizzo IP viene risolto in gnu.org.

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

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

 dig ptr 148.188.51.209.in-addr.arpa 

Annuncio pubblicitario

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 avvenga la magia quando digitiamo il nome di un sito Web in un browser. Con dig , puoi esplorare i processi di creazione di prestigio in rete.

CORRELATI: I migliori laptop Linux per sviluppatori e appassionati