Linux之dig命令
- 2019 年 11 月 6 日
- 筆記
Linux之dig命令
今天說點兒概念性的東西,關於linux的dig命令,這個命令主要是用來從DNS域名伺服器查詢主機的地址資訊的。也就是說,針對給定的域名,解析出實際的IP地址,下面我們看看他的輸出:
[dba_mysql ~]$dig www.baidu.com ###第一部分 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.4 <<>> www.baidu.com ;; global options: +cmd ###第二部分,可使用+nocomments選項來控制是否顯示 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40510 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ###第三部分,可使用+noquestion選項來控制是否顯示 ;; QUESTION SECTION: ;www.baidu.com. IN A ###第四部分,可使用+noanswer選項來控制是否顯示 ;; ANSWER SECTION: www.baidu.com. 117 IN CNAME www.a.shifen.com. www.a.shifen.com. 117 IN A 220.181.38.150 www.a.shifen.com. 117 IN A 220.181.38.149 ###第五部分,可使用+nostats選項來控制是否保留 ;; Query time: 58 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Oct 8 22:29:56 2019 ;; MSG SIZE rcvd: 90
當我們直接使用dig命令+一個域名的時候,輸出的結果如上圖所示,結果中分為了5個部分,分別解釋一下這5個部分:
第一部分:該部分是顯示dig命令的版本和輸入的參數
第二部分:該部分像是服務返回的一些技術資訊,其中比較重要的參數是status,如果返回成功,則status的值是NOERROR,否則可能是NXDOMAIN等輸出結果。
第三部分:該部分是指發送的請求域名
第四部分:該部分指的是返回的IP地址
第五部分:該部分query time指的是耗費時間,server指的是解析的DNS伺服器地址、後面的53指的是埠號,以及具體的命令觸發時間when。
我們可以看到,當我們dig www.baidu.com的時候,實際上是將百度的域名轉發到了一個叫www.a.shifen.com的域名上,然後使用再去解析這個域名,從而得到IP地址,這裡我們把這種域名到域名之間的轉發用cname類型來表示,A類型表示直接從域名查IP。這樣,就比較容易理解上面的A類型記錄和cname類型記錄。
dig命令包含很多參數,常用的幾個參數如下:
1 @<伺服器地址>:指定進行域名解析的域名伺服器;
舉例如下:
dig @127.0.0.1 www.baidu.com
2 -b<ip地址>:當主機具有多個IP地址,指定使用本機的哪個IP地址向域名伺服器發送域名查詢請求;
3 -f<文件名稱>:指定dig以批處理的方式運行,指定的文件中保存著需要批處理查詢的DNS任務資訊;
4 -p:指定域名伺服器所使用埠號,默認是53埠;
5 -t<類型>:指定要查詢的DNS數據類型;
eg:
dig -t a www.baidu.com +noall +answer
[dba_mysql ~]$dig -t a www.baidu.com +noall +answer ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.4 <<>> -t a www.baidu.com +noall +answer ;; global options: +cmd www.baidu.com. 14 IN CNAME www.a.shifen.com. www.a.shifen.com. 443 IN A 182.61.200.6 www.a.shifen.com. 443 IN A 182.61.200.7
其中,noall和answer表示返回的資訊是剪簡訊息。
6 -x<IP地址>:執行逆向域名查詢;
eg:
dig -x 域名
7 -4:使用IPv4;
8 -6:使用IPv6;
9 -h:顯示指令幫助資訊。
10 +short:這個選項可以讓你直接獲得剪短的IP資訊,而沒有那些多餘的內容。
[dba_mysql ~]$dig www.baidu.com +short www.a.shifen.com. 220.181.38.150 220.181.38.149
時間原因,具體的例子這裡不做演示,給出一些常用的方法即可,我們需要知道dig命令是將域名解析成IP的一個命令,常用的命令如下:
# dig 最基本的用法 dig @server www.baidu.com # 用 dig 查看反向解析 dig -x 124.42.102.203 @server # 查找一個域的授權 dns 伺服器 dig www.baidu.com +nssearch # 從根伺服器開始追蹤一個域名的解析過程 dig www.baidu.com +trace
最後介紹一個DNS快取的概念:
假如 DNS 伺服器每次都需要迭代或遞歸查詢上一級的 DNS 伺服器,那麼 DNS 可能就不堪重負,考慮到域名的 DNS 資訊不會頻繁的修改,所以每一級中的 DNS 伺服器都會快取結果(包括瀏覽器這樣的客戶端也會快取 DNS 結果)。快取帶來的弊端可能就是 DNS 資訊可能不是最新的,比如某個域名管理員修改了某個域名的 A 記錄,由於每一級的 DNS 伺服器都有快取,所以最後客戶端拿到的結果不是最新的,為了獲取到最新的結果,可以直接向權威域名伺服器進行資訊查詢。所以使用dig命令的時候,盡量關閉本機的DNS快取,避免出現不準確的資訊。