Fatmawati Achmad Zaenuri / Shutterstock

Linux dig La commande vous permet d’interroger les serveurs DNS et d’effectuer des recherches DNS. Vous pouvez également trouver le domaine vers lequel une adresse IP mène. Nous allons vous montrer comment!


Fonctionnement de la commande dig

Les gens utilisent Linux dig pour interroger les serveurs DNS (Domain Name System). dig est un acronyme pour Domain Information Groper. Avec dig, vous pouvez interroger les serveurs DNS pour obtenir des informations sur divers enregistrements DNS, notamment les adresses d’hôte, les échanges de messagerie, les serveurs de noms et les informations connexes. Il devait être un outil de diagnostic des problèmes DNS. Cependant, vous pouvez l’utiliser pour fouiller et en savoir plus sur DNS, qui est l’un des systèmes centraux qui gardent le trafic de routage Internet.

Internet utilise des adresses de protocole Internet (IP) pour identifier les «emplacements» sur le Web, mais les gens utilisent des noms de domaine. Lorsque vous saisissez un nom de domaine dans une application, comme un navigateur Web ou un client SSH, quelque chose doit être traduit du nom de domaine vers l’adresse IP réelle. C’est là qu’intervient le système de noms de domaine.

Lorsque vous utilisez un nom de domaine avec un programme connecté à Internet, votre routeur local ne peut pas le résoudre (sauf s’il est mis en cache à partir d’une demande précédente). Par conséquent, votre routeur interroge le serveur DNS de votre fournisseur d’accès Internet (FAI) ou tout autre serveur que vous avez configuré pour utiliser. Ceux-ci sont appelés serveurs précurseurs DNS.

Si le serveur DNS a récemment reçu la même demande d’une autre personne sur le même ordinateur, la réponse peut être ses cache. Si tel est le cas, il renvoie simplement ces mêmes informations à votre programme.

Si le serveur précurseur DNS ne parvient pas à localiser le domaine dans son cache, il contacte un serveur de noms racine DNS. Un serveur racine ne contiendra pas les informations nécessaires pour résoudre les noms de domaine en adresses IP, mais il contiendra des listes de serveurs qui peuvent répondre à votre demande.

Le serveur racine examine le domaine de premier niveau auquel appartient votre nom de domaine, tel que .COM, .ORG, .CO.UK, etc. Il envoie ensuite une liste des serveurs de domaine de niveau supérieur qui gèrent ces types de domaines au serveur précurseur DNS. Le serveur précurseur DNS peut alors adresser une nouvelle fois sa demande à un serveur de domaine de premier niveau.

Le serveur de domaine de niveau supérieur renvoie les détails du serveur de noms faisant autorité (où les détails du domaine sont stockés) au serveur précurseur DNS. Le serveur DNS interroge ensuite le serveur de noms faisant autorité qui héberge la zone du domaine que vous avez initialement entré dans votre programme. Le serveur de noms faisant autorité renvoie l’adresse IP au serveur DNS qui, à son tour, vous la renvoie.

Installation de creuser

dig était déjà installé sur nos ordinateurs Ubuntu 18.04 et Fedora 30. Cependant, nous avons dû l’installer sur l’ordinateur Manjaro 18.04 avec la commande suivante:

sudo pacman -Sy bind-tools

La commande "sudo pacman -Sy bind-tools" dans une fenêtre de terminal.

Premiers pas avec dig

Dans notre premier exemple, nous renverrons les adresses IP associées à un nom de domaine. Souvent, plusieurs adresses IP sont associées à un seul nom de domaine. Cela se produit souvent si l’équilibrage de charge est utilisé, par exemple.

Nous utilisons le +short option de requête, comme indiqué ci-dessous, qui nous donne une réponse laconique:

dig howtogeek.com +short

La commande "dig howtogeek.com + short" dans une fenêtre de terminal.

Toutes les adresses IP associées au domaine howtogeek.com sont répertoriées pour nous. À l’autre extrémité du spectre, si nous ne fais pas Utilisez le +short option de requête, la sortie est assez verbeuse.

Donc, nous tapons ce qui suit pour le diriger less:

dig howtogeek.com | less

La commande "dig howtogeek.com | less" dans une fenêtre de terminal.

La sortie est affichée dans less, comme indiqué ci-dessous.

La sortie de la commande "dig howtogeek.com | less" dans une fenêtre de terminal.

Voici la liste complète:

; <<>> 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

Décortiquons ce morceau par morceau.

Entête

Voyons d'abord ce que nous avons dans l'en-tête:

; <<>> 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

Maintenant, voici ce que tout cela signifie:

  • Première ligne: La version de dig et le domaine interrogé.
  • Options globales: Comme nous le verrons, vous pouvez utiliser dig pour interroger plusieurs domaines simultanément. Cette ligne affiche les options qui ont été appliquées à toutes les requêtes de domaine. Dans notre exemple simple, c'était juste la valeur par défaut +cmd (commande).
  • Opcode: Requête: C'est le type d'opération qui a été demandé qui, dans ce cas, était un query. Cette valeur peut également être iquery pour une requête inverse, ou status si vous testez simplement l'état du système DNS.
  • Statut: Aucune erreur: Il n'y a eu aucune erreur et la demande a été correctement résolue.
  • ID: 12017: Cet ID aléatoire lie la demande et la réponse ensemble.
  • Drapeaux: qr rd ra: Ceux-ci représentent query, recursion desired, et recursion available. La récursivité est une forme de recherche DNS (l'autre est itérative). Vous pourriez également voir AA, qui signifie réponse faisant autorité, ce qui signifie qu'un serveur de noms faisant autorité a fourni la réponse.
  • Requête: 1: Le nombre de requêtes dans cette session, qui était une.
  • Réponse: 4: Le nombre de réponses dans cette réponse, qui est de quatre.
  • Autorité: 0: Le nombre de réponses provenant d'un serveur de noms faisant autorité, qui était zéro dans ce cas. La réponse a été renvoyée par le cache d'un serveur précurseur DNS. Il n'y aura aucune section faisant autorité dans la réponse.
  • Supplémentaire: 1: Il y a un élément d'information supplémentaire. (Étrangement, rien n'est répertorié sauf si cette valeur est deux ou plus.)

Opt Pseudosection

Ensuite, nous voyons ce qui suit dans la pseudosection Opt:

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

Décomposons cela:

  • EDNS: version 0: Version du système d'extension pour DNS utilisée. EDNS transmet des données étendues et des indicateurs en étendant la taille des paquets UDP (User Datagram Protocol). Ceci est indiqué par un indicateur de taille variable.
  • drapeaux: Aucun indicateur n'est utilisé.
  • udp: 4096: La taille du paquet UDP.

Section des questions

Dans la section Question, nous voyons ce qui suit:

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

Voici ce que cela signifie:

  • howtogeek.com: Le nom de domaine que nous recherchons.
  • DANS: Nous faisons une requête de classe Internet.
  • UNE: Sauf indication contraire, dig demandera un enregistrement A (adresse) au serveur DNS.

Section des réponses

La section Réponse contient les quatre réponses suivantes que nous avons reçues du serveur 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

Voici ce que ces réponses signifient:

  • 3551: Il s'agit du Time to Live (TTL), un entier signé 32 bits qui contient l'intervalle de temps pendant lequel un enregistrement peut être mis en cache. À son expiration, les données doivent être utilisées dans une réponse à une demande jusqu'à ce qu'elles soient actualisées par le serveur DNS.
  • DANS: Nous avons fait une requête de classe Internet.
  • UNE: Nous avons demandé un enregistrement A au serveur DNS.

Section Statistiques

Statistiques est la dernière section et contient les informations suivantes:

;; 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

Voici ce que nous avons:

  • Temps de requête: 0 ms: Le temps qu'il a fallu pour obtenir la réponse.
  • SERVEUR: 127.0.0.53 # 53 (127.0.0.53): L'adresse IP et le numéro de port du serveur DNS qui a répondu. Dans ce cas, il pointe vers le résolveur de talon de mise en cache local. Cela transfère les requêtes DNS aux serveurs DNS en amont configurés. Sur l'ordinateur de test de Manajro, l'adresse indiquée ici était 8.8.8.8 # 53, qui est le service DNS public de Google.
  • QUAND: Dim 22 mars 07:44:37 EDT 2020: Quand la demande a été faite.
  • MSG SIZE rcvd: 106: La taille du message reçu du serveur DNS.

Être sélectif

Vous n'avez pas à vous contenter des deux extrêmes des lèvres serrées et bavardes. le dig La commande vous permet d'inclure ou d'exclure de manière sélective des sections des résultats.

Les options de requête suivantes supprimeront cette section des résultats:

  • + nocomments: N'affichez pas les lignes de commentaires.
  • + absence d'autorité: N'affichez pas la section Autorité.
  • + noadditional: N'affichez pas la section supplémentaire.
  • + nostats: N'affiche pas la section des statistiques.
  • + noanswer: N'affichez pas la section des réponses.
  • + noall: Ne montre rien!

le +noall L'option de requête est généralement combinée avec l'une de celles ci-dessus pour inclure une section dans les résultats. Ainsi, au lieu de taper une longue chaîne d'options de requête pour désactiver plusieurs sections, vous pouvez utiliser +noall pour les désactiver tous.

Vous pouvez ensuite utiliser les options de requête inclusives suivantes pour réactiver celles que vous souhaitez voir:

  • + commentaires: Afficher les lignes de commentaire.
  • + autorité: Montrez la section d'autorité.
  • + supplémentaire: Affichez la section supplémentaire.
  • + statistiques: Afficher la section des statistiques.
  • + réponse: Affichez la section des réponses.
  • + tous: Montre tout.

Nous tapons ce qui suit pour faire une demande et exclure les lignes de commentaire:

dig howtogeek.com +nocomments

La commande "dig howtogeek.com + nocomments" dans une fenêtre de terminal.

Si nous utilisons le +noall seule option de requête, comme indiqué ci-dessous, nous n'obtiendrons aucune sortie utile:

dig howtogeek.com +noall

La commande "dig howtogeek.com + noall" dans une fenêtre de terminal.

Nous pouvons ajouter sélectivement les sections que nous voulons voir. Pour ajouter la section des réponses, nous tapons ce qui suit:

dig howtogeek.com +noall +answer

La commande "dig howtogeek.com + noall + answer" dans une fenêtre de terminal.

Si nous tapons ce qui suit pour activer +stats, nous verrons également la section des statistiques:

dig howtogeek.com +noall +answer +stats

La commande "creuser howtogeek.com + noall + answer + stats" dans une fenêtre de terminal.

le +noall +answer la combinaison est souvent utilisée. Vous pouvez ajouter d'autres sections à la ligne de commande selon vos besoins. Si vous voulez éviter de taper +noall +answer sur la ligne de commande chaque fois que vous utilisez dig, vous pouvez les placer dans un fichier de configuration appelé «.digrc». Il se trouve dans votre répertoire personnel.

Nous tapons ce qui suit pour en créer un avec echo:

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

Nous pouvons ensuite taper ce qui suit pour vérifier son contenu:

cat .digrc

Les commandes "echo" + noall + answer "> $ HOME / .digrc" et "cat .digrc" dans une fenêtre de terminal.

Ces deux options seront désormais appliquées à toutes les utilisations futures de dig, comme indiqué ci-dessous:

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

"dig ubuntu.org", "dig linux.org" et "dig github.com" dans une fenêtre de terminal.

Cette dig Le fichier de configuration sera utilisé pour les exemples restants de cet article.

Enregistrements DNS

Les informations retournées à votre dig les demandes sont extraites de différents types d'enregistrements conservés sur le serveur DNS. A moins que nous ne demandions quelque chose de différent, dig interroge l'enregistrement A (adresse). Voici les types d'enregistrements couramment utilisés avec dig:

  • Un enregistrement: Lie le domaine à une adresse IP version 4.
  • Enregistrement MX: L'échange de messagerie enregistre les e-mails directs envoyés aux domaines vers le serveur de messagerie approprié.
  • Enregistrement NS: Les enregistrements de serveur de noms délèguent un domaine (ou sous-domaine) à un ensemble de serveurs DNS.
  • Enregistrement TXT: Les enregistrements de texte stockent des informations textuelles concernant le domaine. En règle générale, ils peuvent être utilisés pour supprimer les e-mails falsifiés ou falsifiés.
  • Enregistrement SOA: Le début des notices d'autorité peut contenir de nombreuses informations sur le domaine. Ici, vous pouvez trouver le serveur de noms principal, la partie responsable, un horodatage pour les modifications, la fréquence des rafraîchissements de zone et une série de délais pour les tentatives et abandons.
  • TTL: La durée de vie est un paramètre pour chaque enregistrement DNS qui spécifie la durée pendant laquelle un serveur précurseur DNS est autorisé à mettre en cache chaque requête DNS. À l'expiration de ce délai, les données doivent être actualisées pour les demandes suivantes.
  • TOUT: Cela raconte dig pour renvoyer tous les types d'enregistrement DNS qu'il peut.

La spécification du type d'enregistrement A ne modifie pas l'action par défaut, qui consiste à interroger l'enregistrement d'adresse et à obtenir l'adresse IP, comme indiqué ci-dessous:

dig redhat.com A

La commande "dig redhat.com A" dans une fenêtre de terminal.

Pour interroger les enregistrements d'échange de courrier, nous utilisons l'indicateur MX suivant:

dig yahoo.com MX

La commande "dig yahoo.com MX" dans une fenêtre de terminal.

L'indicateur de serveur de noms renvoie le nom suivant des serveurs de noms racine associés au domaine de niveau supérieur:

dig fedora.com NS

La commande "dig fedora.com NS" dans une fenêtre de terminal.

Pour interroger le début de l'enregistrement d'autorité, nous tapons l'indicateur SOA suivant:

dig manjaro.com SOA

La commande "dig manjaro.com SOA" dans une fenêtre de terminal.

Le drapeau TTL nous montrera le temps de vivre pour les données dans le cache du serveur DNS. Si nous faisons une série de demandes, nous voyons le temps de vivre se réduire à rien, puis revenir à sa valeur de départ.

Nous tapons ce qui suit:

dig usa.gov TTL

La commande "dig usa.gov TTL" dans une fenêtre de terminal.

Pour voir les enregistrements de texte, nous tapons le drapeau TX:

dig usa.gov TXT

La commande "dig usa.gov TXT" dans une fenêtre de terminal.

Spécification du serveur DNS

Si vous souhaitez utiliser un serveur DNS particulier pour votre demande, vous pouvez utiliser le signe at (@) pour le transmettre à dig comme paramètre de ligne de commande.

Avec le serveur DNS par défaut (voir ci-dessous), dig fait référence au résolveur de stub de mise en cache local à 127.0.0.53.

dig usa.gov +stats

Maintenant, nous tapons ce qui suit pour utiliser le serveur DNS public de Google au 8.8.8.8:

dig @8.8.8.8 usa.gov +stats

Les commandes "dig usa.gov + stats" et "dig @ 8.8.8.8 usa.gov + stats" dans une fenêtre de terminal.

Utilisation de Dig avec plusieurs domaines

Nous pouvons transmettre plusieurs domaines à dig sur la ligne de commande, comme illustré ci-dessous:

dig ubuntu.org fedora.org manjaro.com

La commande "dig ubuntu.org fedora.org manjaro.com" dans une fenêtre de terminal.

Si vous vérifiez régulièrement un ensemble de domaines, vous pouvez les stocker dans un fichier texte et le transmettre à dig. Tous les domaines du fichier seront vérifiés à tour de rôle.

Notre fichier s'appelle «domaines.txt». Nous utiliserons cat pour afficher son contenu, puis le transmettre à dig avec le -f (fichier). Nous tapons ce qui suit:

cat domains.txt
dig -f domains.txt

Les commandes "cat domaines.txt" et "dig -f domaines.txt" dans une fenêtre de terminal.

Recherches DNS inversées

Si vous avez une adresse IP et que vous voulez savoir où elle va, vous pouvez essayer une recherche DNS inversée. S'il se résout en un serveur enregistré auprès d'un serveur DNS, vous pourrez peut-être découvrir son domaine.

Votre capacité dépend de la présence d'un PTR (enregistrement de pointeur). Les PTR résolvent une adresse IP en un nom de domaine complet. Cependant, comme ceux-ci ne sont pas obligatoires, ils ne sont pas toujours présents sur un domaine.

Voyons si nous pouvons savoir où l’adresse IP 209.51.188.148 nous mène. Nous tapons ce qui suit, en utilisant le -x Option (recherche inversée):

dig -x 209.51.188.148

La commande "dig -x 209.51.188.148" dans une fenêtre de terminal.

Presto! L'adresse IP se résout en gnu.org.

Parce qu'un PTR est un enregistrement DNS, et nous savons dig peut demander des enregistrements DNS spécifiés, ne pourrions-nous pas simplement demander dig récupérer le PTR pour nous? Oui, nous le pouvons, mais cela demande un peu plus de travail.

Nous devons fournir l'adresse IP dans l'ordre inverse .in-addr.arpa à la fin, comme indiqué ci-dessous:

dig ptr 148.188.51.209.in-addr.arpa

La commande "dig ptr 148.188.51.209.in-addr.arpa" dans une fenêtre de terminal.

Nous obtenons le même résultat; cela a juste pris un peu plus d'efforts.

Pouvez-vous le creuser?

Nous utilisons tous quotidiennement Internet, et les esprits curieux se sont souvent demandé comment la magie se produit lorsque nous tapons le nom d'un site Web dans un navigateur. Avec dig, vous pouvez explorer les processus de conjuration de réseau.

Laisser un commentaire