dig命令:幫你記錄DNS尋址全過程


dig命令:幫你記錄DNS尋址全過程

在《DNS自述:我是如何為域名找到家的》這篇文章里,我們了解了域名的 DNS 解析過程。但整個過程都是我在說,你們在聽,總感覺干巴巴的,沒有實操來得記憶深刻。那有沒有一些命令可以讓我們看到 DNS 的解析過程呢?

那肯定是有的,今天就帶大家認識一些關於 DNS 解析的命令。簡單地說,最常用的 DNS 解析命令有:

  • dig 命令
  • host 命令
  • nslookup 命令
  • whois 命令

dig命令

查詢DNS尋址過程

如果我們要查找某個網址的尋址過程,那么我們可以使用下面語法:dig 域名,例如:

dig math.stackexchange.com

運行的結果是:

; <<>> DiG 9.9.7-P3 <<>> math.stackexchange.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23221
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;math.stackexchange.com.		IN	A

;; ANSWER SECTION:
math.stackexchange.com.	600	IN	A	151.101.65.69

;; Query time: 16 msec
;; SERVER: 10.xxx.xxx.253#53(10.xxx.xxx.253)
;; WHEN: Sun Dec 29 13:08:22 CST 2019
;; MSG SIZE  rcvd: 67

上面的結果可以分為4個部分。

第一部分是綜述,說明此次命令一共查詢了幾次,有幾個回答。

; <<>> DiG 9.9.7-P3 <<>> math.stackexchange.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23221
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

第二部分是 QUESTION SECTION,即說明此命令發送了什么樣的指令。這里表示我們詢問 math.stackexchange.com 域名的 A 記錄。

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;math.stackexchange.com.		IN A

第三部分是 ANSWER SECTION,即說明此命令執行后返回的結果。這里的結果表明 math.stackexchange.com. 域名的 A 記錄指向了 151.101.65.69 這個 IP。

;; ANSWER SECTION:
math.stackexchange.com.	600 IN A 151.101.65.69

第四部分是總結,即說明此次查詢的一些信息,例如:查詢耗時,本地DNS地址,查詢時間,返回消息包大小。

;; Query time: 16 msec
;; SERVER: 10.xxx.xxx.253#53(10.xxx.xxx.253)
;; WHEN: Sun Dec 29 13:08:22 CST 2019
;; MSG SIZE  rcvd: 67

直接顯示DNS尋址結果

當我們用 dig 域名 查詢時,會顯示出整個尋址過程。但如果我們只想要看到最終的結果,那么我們可以加上 +short 參數。這樣控制台直接返回該域名對應的 IP 地址。例如當我們執行下面的命令,其直接返回了 151.101.65.69 這個 IP 地址。

[~]$ dig +short math.stackexchange.com
151.101.65.69

向特定DNS服務器尋址

當我們使用 dig 域名 進行 DNS 尋址時,其默認向我們的本地 DNS 服務器尋址。如果我們想向特定的 DNS 服務器尋址,我們可以用下面的命令:

dig @8.8.8.8 math.stackexchange.com

上面的命令表明:向 8.8.8.8 DNS 服務器尋找 math.stackexchange.com 域名的 DNS 解析結果。其返回結果為:

; <<>> DiG 9.9.7-P3 <<>> @8.8.8.8 math.stackexchange.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12245
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
math.stackexchange.com.	3258 IN A 151.101.1.69
math.stackexchange.com.	3258 IN A 151.101.65.69
math.stackexchange.com.	3258 IN A 151.101.129.69
math.stackexchange.com.	3258 IN A 151.101.193.69

;; Query time: 14 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 29 13:18:03 CST 2019
;; MSG SIZE  rcvd: 115

從返回結果可以看到,當我們向 8.8.8.8 DNS 服務器尋址時,其返回了 4 個 IP 地址。但我們向本地 DNS 服務器尋址時,卻會返回了 1 個 IP 地址。這說明了不同 DNS 服務器所存儲的解析記錄不同,並不說某個 DNS 服務器是錯誤的。這里 8.8.8.8 是谷歌的 DNS 服務器,所以擁有的解析記錄更加全面。而本地 DNS 服務器是 ISP 運營商的,其解析記錄相對來說少一些。

查詢某種解析類型的記錄

在之前「A記錄都不懂,怎么做開發Leader?」中我們講過,域名解析有許多種類型,包括:NS類型、A 類型、MX 類型等。而我們可以使用 dig 命令去查詢其解析類型的值,其語法為:

dig 解析類型 域名

例如我們查看下 shuyi.me 這個域名的 NS 記錄,那么其執行命令及其結果為:

[~]$ dig ns shuyi.me
; <<>> DiG 9.9.7-P3 <<>> ns shuyi.me
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22809
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;shuyi.me.			IN	NS

;; ANSWER SECTION:
shuyi.me.		21599	IN	NS	f1g1ns2.dnspod.net.
shuyi.me.		21599	IN	NS	f1g1ns1.dnspod.net.

;; ADDITIONAL SECTION:
f1g1ns2.dnspod.net.	542	IN	A 14.215.155.203
f1g1ns1.dnspod.net.	762	IN	A 14.215.155.156

;; Query time: 91 msec
;; SERVER: 10.102.201.253#53(10.102.201.253)
;; WHEN: Sun Dec 29 13:24:42 CST 2019
;; MSG SIZE  rcvd: 123

可以看到 shuyi.me 一共有 2 個 NS 解析結果,指向了 f1g1ns2.dnspod.net.f1g1ns1.dnspod.net.

我們繼續看下 shuyi.me 這個域名的 A 記錄,其執行結果為:

[~]$ dig a shuyi.me

; <<>> DiG 9.9.7-P3 <<>> a shuyi.me
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7823
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;shuyi.me.			IN	A

;; ANSWER SECTION:
shuyi.me.		599	IN	A	192.30.252.153

;; Query time: 268 msec
;; SERVER: 10.102.201.253#53(10.102.201.253)
;; WHEN: Sun Dec 29 13:27:34 CST 2019
;; MSG SIZE  rcvd: 53

可以看到,其只有一個結果,指向的 IP 為:192.30.252.153。我們繼續看看 shuyi.me 的 MX 記錄:

[~]$ dig mx shuyi.me

; <<>> DiG 9.9.7-P3 <<>> mx shuyi.me
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40996
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;shuyi.me.			IN	MX

;; AUTHORITY SECTION:
shuyi.me.		180	IN	SOA	f1g1ns1.dnspod.net. freednsadmin.dnspod.com. 1517495328 3600 180 1209600 180

;; Query time: 43 msec
;; SERVER: 10.102.201.253#53(10.102.201.253)
;; WHEN: Sun Dec 29 13:28:14 CST 2019
;; MSG SIZE  rcvd: 114

可以看到其返回了一條類型為 SOA 的記錄,這表明 shuyi.meMX 記錄不存在。

反向查詢IP對應的域名

我們上面都是通過域名查詢 IP,但其實我們也可以通過 IP 去查詢其對應的域名。

[~]$ dig -x 192.30.252.153

; <<>> DiG 9.9.7-P3 <<>> -x 192.30.252.153
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15495
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;153.252.30.192.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
153.252.30.192.in-addr.arpa. 3110 IN PTR lb-192-30-252-153-iad.github.com.

;; Query time: 15 msec
;; SERVER: 10.102.201.253#53(10.102.201.253)
;; WHEN: Sun Dec 29 13:31:04 CST 2019
;; MSG SIZE  rcvd: 102

上面我們查詢 192.30.252.153 對應的域名,其查詢結果表明該 IP 對應的域名為:lb-192-30-252-153-iad.github.com.,其實一個 github 的二級域名。

除了 dig 命令能顯示 DNS 尋址的過程,host 命令以及 nslookup 命令也有這樣的功能。

host命令

host 命令可以直接返回域名的各種記錄,例如:

[~]$ host shuyi.me
shuyi.me has address 192.30.252.153

上面的命令直接返回了 shuyi.me 域名對應的 A 記錄地址。我們再試試 baidu.com 這個網址:

[~]$ host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 14.215.177.39

可以看到,其返回了兩條記錄。第 1 條表示 www.baidu.com 有一個別名(CNAME記錄)指向了 www.a.shifen.com。第 2 條表示 www.a.shifen.com 有一個地址(A記錄)指向了 IP 地址 14.215.177.39

host 命令也可以通過 IP 地址逆向查詢對應的域名,例如:

[~]$ host 192.30.252.153
153.252.30.192.in-addr.arpa domain name pointer lb-192-30-252-153-iad.github.com.

上面的結果表示 192.30.252.153 指向了域名 lb-192-30-252-153-iad.github.com.

nslookup命令

除了 dig 和 host 命令之外,我們也可以用 nslookup 命令查詢域名的記錄,例如:

[~]$ nslookup shuyi.me
Server:		10.xxx.xxx.253
Address:	10.xxx.xxx.253#53

Non-authoritative answer:
Name:	shuyi.me
Address: 192.30.252.153

上面返回的結果表示,其向 10.xxx.xxx.253 DNS 服務器詢問 shuyi.me 域名對應的 IP 地址,結果是:192.30.252.153

查詢域名的注冊情況

當我們想知道域名的注冊情況時,我們可以使用 whois 命令,例如:

省略其他……
Domain Name: SHUYI.ME
Registry Domain ID: D425500000017849766-AGRS
Registrar WHOIS Server: whois.godaddy.com
Registrar URL: http://www.godaddy.com
Updated Date: 2018-04-02T21:15:42Z
Creation Date: 2018-02-01T10:30:33Z
Registry Expiry Date: 2020-02-01T10:30:33Z
Registrar Registration Expiration Date:
Registrar: GoDaddy.com, LLC
Registrar IANA ID: 146
Registrar Abuse Contact Email: abuse@godaddy.com
Registrar Abuse Contact Phone: +1.4806242505
Reseller:
Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
Registrant Organization:
Registrant State/Province: Guangdong
Registrant Country: CN
Name Server: F1G1NS1.DNSPOD.NET
Name Server: F1G1NS2.DNSPOD.NET
DNSSEC: unsigned
URL of the ICANN Whois Inaccuracy Complaint Form  https://www.icann.org/wicf/)
>>> Last update of WHOIS database: 2019-12-29T05:39:51Z <<<
>>> 省略其他……

通過 whois 命令,我們可以知道該域名通過哪個服務商注冊以及注冊地點等信息。

總結

最后,我們總結一下本篇文章的內容。我們想查詢域名對應的 IP,可以通過 dig、host、nslokup 命令。一般來說,dig 命令就已經足夠使用,可以完全覆蓋日常使用需求。而需要查詢域名注冊信息,則可以使用 whois 命令。

下面對本篇文章的所有命令做個匯總,方便查閱。

dig命令:

  • dig math.stackexchange.com 查詢DNS尋址過程
  • dig +short math.stackexchange.com 直接顯示DNS尋址結果
  • dig @8.8.8.8 math.stackexchange.com 向特定DNS服務器尋址
  • dig ns com 查詢com頂級域名的ns記錄
  • dig a com 查詢com頂級域名的a記錄
  • dig -x 192.30.252.153 用於查詢PTR記錄(用IP查域名)

host命令:

  • host github.com 返回域名的各種記錄
  • host 192.30.252.153 逆向查詢IP地址對應的域名

nslookup命令:

  • nslookup github.com 查詢域名記錄

whois命令:

  • whois shuyi.me 查詢域名的注冊情況

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM