Notes › Linux cli scripts
La commande dig
dig (Domain Information Groper) est un outil en ligne de commande qui interroge les serveurs DNS. Il fait partie du paquet BIND (dnsutils sous Debian/Ubuntu, bind-utils sous RHEL/Fedora). On l’utilise surtout pour diagnostiquer la résolution de noms.
Syntaxe générale
1
| dig [@serveur] [nom] [type] [classe] [options] [+options_de_requête]
|
@serveur : le serveur DNS à interroger (par défaut, celui de /etc/resolv.conf)
nom : le domaine recherché
type : le type d’enregistrement (A par défaut)
classe : presque toujours IN (Internet)
Exemples courants
1
2
3
4
5
6
7
8
9
10
11
| dig exemple.fr # Enregistrement A (IPv4)
dig exemple.fr AAAA # IPv6
dig exemple.fr MX # Serveurs de messagerie
dig exemple.fr NS # Serveurs de noms faisant autorité
dig exemple.fr TXT # SPF, DKIM, vérifications diverses
dig exemple.fr SOA # Informations de zone
dig exemple.fr CNAME # Alias
dig exemple.fr ANY # Tout (souvent refusé par les serveurs modernes)
dig @1.1.1.1 exemple.fr # Interroger Cloudflare
dig @8.8.8.8 exemple.fr # Interroger Google
dig -x 93.184.216.34 # Résolution inverse (PTR)
|
Lire la sortie
1
2
3
4
5
6
7
8
9
10
11
12
| ; <<>> DiG 9.18 <<>> exemple.fr
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;exemple.fr. IN A
;; ANSWER SECTION:
exemple.fr. 3600 IN A 192.0.2.10
;; Query time: 24 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
|
- status :
NOERROR (succès), NXDOMAIN (domaine inexistant), SERVFAIL (erreur du serveur), REFUSED (requête refusée)
- flags :
qr = réponse, aa = réponse faisant autorité, rd = récursion demandée, ra = récursion disponible, ad = données authentifiées par DNSSEC
- ANSWER SECTION : nom, TTL en secondes, classe, type, valeur
- AUTHORITY / ADDITIONAL : serveurs faisant autorité et données complémentaires
Options utiles
| Option |
Effet |
+short |
Affiche seulement la valeur |
+noall +answer |
Affiche seulement la section réponse |
+trace |
Suit la résolution depuis les serveurs racine |
+nocmd +nostats |
Retire l’en-tête et les statistiques |
+tcp |
Force le TCP au lieu de l’UDP |
+dnssec |
Demande les signatures DNSSEC (RRSIG) |
+norecurse |
Désactive la récursion |
+time=N / +tries=N |
Délai d’attente et nombre d’essais |
+multiline |
Affiche les longs enregistrements (SOA, DNSKEY) de façon lisible |
+https / +tls |
DNS-over-HTTPS / DNS-over-TLS (BIND 9.18 et plus) |
-4 / -6 |
Force IPv4 ou IPv6 pour le transport |
-p 5353 |
Port personnalisé |
-f fichier |
Traite une liste de requêtes depuis un fichier |
Cas pratiques
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| # IP seule, pratique dans un script
dig +short exemple.fr
# Vérifier la propagation DNS sur plusieurs résolveurs
for s in 1.1.1.1 8.8.8.8 9.9.9.9; do echo "$s: $(dig @$s +short exemple.fr)"; done
# Interroger directement le serveur faisant autorité (contourne le cache)
dig @$(dig +short NS exemple.fr | head -1) exemple.fr
# Diagnostiquer une délégation cassée
dig +trace exemple.fr
# Vérifier l'enregistrement SPF ou DMARC
dig +short TXT exemple.fr
dig +short TXT _dmarc.exemple.fr
# Vérifier une clé DKIM
dig +short TXT selecteur._domainkey.exemple.fr
# Tenter un transfert de zone (doit normalement être refusé)
dig @ns1.exemple.fr exemple.fr AXFR
# Afficher le TTL restant dans le cache du résolveur
dig +noall +answer exemple.fr
|
Fichier de configuration
Vous pouvez enregistrer des options par défaut dans ~/.digrc, par exemple :
Alternatives
nslookup : plus ancien et moins précis
host : sortie plus simple (host exemple.fr)
drill (ldns) et kdig (Knot) : équivalents modernes de dig
doggo / dog : versions modernes avec sortie colorée et prise en charge de DoH et DoT
Si par « développer » vous vouliez dire écrire votre propre version de dig (en Python, Go ou Rust, par exemple), dites-le-moi et je vous fournis une implémentation.