Linux下解析域名命令-dig 命令使用詳解

Linux下解析域名除了使用nslookup以外,開可使用dig命令來解析域名,dig命令能夠獲得更多的域名信息。dig 命令主要用來從 DNS 域名服務器查詢主機地址信息。dig的全稱是 (domain information groper)。它是一個用來靈活探測DNS的工具。它會打印出>DNS name server的迴應。
查詢單個域名的 DNS 信息

dig 命令最典型的用法就是查詢單個主機的信息。linux

linuxidc@linuxidc:~$ dig www.linuxidc.com

; < <>> DiG 9.11.3-1Ubuntu1.5-Ubuntu < <>> www.linuxidc.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 17774
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
www.linuxidc.com. 5 IN A 122.228.238.15
www.linuxidc.com. 5 IN A 106.42.25.203

;; Query time: 10 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Mar 03 10:55:35 CST 2019
;; MSG SIZE  rcvd: 77

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解

dig 命令默認的輸出信息比較豐富,大概能夠分爲。 5 個部分

第一部分顯示 dig 命令的版本和輸入的參數。
第二部分顯示服務返回的一些技術詳情,比較重要的是 status。若是 status 的值爲 NOERROR 則說明本次查詢成功結束。
第三部分中的 "QUESTION SECTION" 顯示咱們要查詢的域名。
第四部分的 "ANSWER SECTION" 是查詢到的結果。
第五部分則是本次查詢的一些統計信息,好比用了多長時間,查詢了哪一個 DNS 服務器,在什麼時間進行的查詢等等。ubuntu

默認狀況下 dig 命令查詢 A 記錄,上圖中顯示的 A 即說明查詢的記錄類型爲 A 記錄。在嘗試查詢其它類型的記錄前讓咱們先來了解一下常見的 DNS 記錄類型。服務器

常見 DNS 記錄的類型
類型目的

A 地址記錄,用來指定域名的 IPv4 地址,若是須要將域名指向一個 IP 地址,就須要添加 A 記錄。
AAAA 用來指定主機名(或域名)對應的 IPv6 地址記錄。
CNAME 若是須要將域名指向另外一個域名,再由另外一個域名提供 ip 地址,就須要添加 CNAME 記錄。
MX 若是須要設置郵箱,讓郵箱可以收到郵件,須要添加 MX 記錄。
NS 域名服務器記錄,若是須要把子域名交給其餘 DNS 服務器解析,就須要添加 NS 記錄。
SOA SOA 這種記錄是全部區域性文件中的強制性記錄。它必須是一個文件中的第一個記錄。
TXT 能夠寫任何東西,長度限制爲 255。絕大多數的 TXT記錄是用來作 SPF 記錄(反垃圾郵件)。dom

查詢 CNAME 類型的記錄
除了A記錄,常見的DNS記錄還有CNAME,咱們能夠在查詢時指定要查詢的DNS記錄類型:
linuxidc@linuxidc:~$ dig m.linuxidc.com CNAME

; < <>> DiG 9.11.3-1ubuntu1.5-Ubuntu < <>> m.linuxidc.com CNAME
;; global options: +cmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 61349
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;m.linuxidc.com.   IN CNAME

;; Query time: 26 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Mar 03 11:20:34 CST 2019
;; MSG SIZE  rcvd: 43

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解

這樣結果中就只有 CNAME 的記錄。其實咱們能夠在查詢中指定任何 DNS 記錄的類型。工具

從指定的 DNS 服務器上查詢
因爲一些緣由,但願從指定的 DNS 服務器上進行查詢(從默認的 DNS 服務器上得到的結果可能不許確)。指定 DNS 服務器的方式爲使用 @ 符號:
linuxidc@linuxidc:~$ dig @8.8.8.8 m.linuxidc.com

; < <>> DiG 9.11.3-1ubuntu1.5-Ubuntu < <>> @8.8.8.8 m.linuxidc.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 38966
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;m.linuxidc.com.   IN A

;; ANSWER SECTION:
m.linuxidc.com.  199 IN A 122.228.238.71
m.linuxidc.com.  199 IN A 113.107.238.155

;; Query time: 120 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Mar 03 11:21:48 CST 2019
;; MSG SIZE  rcvd: 75

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解

從上圖能夠看到本次查詢的 DNS 服務器爲 8.8.8.8。google

若是不指定 DNS 服務器,dig 會依次使用 /etc/resolv.conf 裏的地址做爲 DNS 服務器:

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解

linuxidc@linuxidc:~$ dig m.linuxidc.com
上面查詢的 DNS 服務器就變成了:

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解

反向查詢
在前面的查詢中咱們指定了查詢服務器爲 8.8.8.8,這是誰家的 DNS 服務器?其實咱們可使用 dig 的 -x 選項來反向解析 IP 地址對應的域名:
linuxidc@linuxidc:~$ dig -x 8.8.8.8 +short
google-public-dns-a.google.com.

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解
好吧,應該是Google的,能夠放心使用了。.net

控制顯示結果
dig 命令默認返回的結果展現詳細的信息,若是要得到精簡的結果可使用 +short 選項:
linuxidc@linuxidc:~$ dig +short m.linuxidc.com
122.228.238.15
106.119.182.141

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解
這下顯示的結果就清爽多了。3d

其實咱們還能夠經過更多選項來控制輸出的內容,好比只想顯示 "ANSWER SECTION" 的內容:

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解

這個結果很不錯,就是使用的選項太多了(dig 命令有不少這樣的選項,詳情請參考使用手冊)。咱們能夠換一種優雅一些的方式來實現和上面相同的結果:
linuxidc@linuxidc:~$ dig m.linuxidc.com +noall +answer

; < <>> DiG 9.11.3-1ubuntu1.5-Ubuntu < <>> m.linuxidc.com +noall +answer
;; global options: +cmd
m.linuxidc.com.  5 IN A 113.107.238.212
m.linuxidc.com.  5 IN A 122.228.238.15

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解

跟蹤整個查詢過程
若是你好奇 dig 命令執行查詢時都經歷了哪些過程,你能夠嘗試使用 +trace 選項。它會輸出從根域到最終結果的全部信息:
linuxidc@linuxidc:~$ dig sohu.com @202.102.134.68 -p 53 -t MX +trace

; < <>> DiG 9.11.3-1ubuntu1.5-Ubuntu < <>> sohu.com @202.102.134.68 -p 53 -t MX +trace
;; global options: +cmd
.   482761 IN NS f.root-servers.net.
.   482761 IN NS a.root-servers.net.
.   482761 IN NS c.root-servers.net.
.   482761 IN NS b.root-servers.net.
.   482761 IN NS j.root-servers.net.
.   482761 IN NS d.root-servers.net.
.   482761 IN NS k.root-servers.net.
.   482761 IN NS e.root-servers.net.
.   482761 IN NS h.root-servers.net.
.   482761 IN NS i.root-servers.net.
.   482761 IN NS m.root-servers.net.
.   482761 IN NS g.root-servers.net.
.   482761 IN NS l.root-servers.net.
;; Received 239 bytes from 202.102.134.68#53(202.102.134.68) in 40 ms

com.   172800 IN NS d.gtld-servers.net.

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解

上圖中顯示的並非一個完整的結果,感興趣的朋友能夠本身嘗試。code

顯示13個根域服務器

internet上有13個根域服務器,使用不加參數的dig命令顯示這些服務器信息orm

linuxidc@linuxidc:~$ dig

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

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;.    IN NS

;; ANSWER SECTION:
.   5 IN NS b.root-servers.net.
.   5 IN NS c.root-servers.net.
.   5 IN NS d.root-servers.net.
.   5 IN NS e.root-servers.net.
.   5 IN NS f.root-servers.net.
.   5 IN NS g.root-servers.net.
.   5 IN NS h.root-servers.net.
.   5 IN NS i.root-servers.net.
.   5 IN NS j.root-servers.net.
.   5 IN NS k.root-servers.net.
.   5 IN NS l.root-servers.net.
.   5 IN NS m.root-servers.net.
.   5 IN NS a.root-servers.net.

;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Mar 03 11:37:11 CST 2019
;; MSG SIZE  rcvd: 239

Linux下解析域名命令-dig 命令使用詳解Linux下解析域名命令-dig 命令使用詳解

總結

dig 是一個很給力 DNS 查詢工具,本文僅介紹了其常見用法,更多的命令選項及使用方法請查看 man page。

相關文章
相關標籤/搜索