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快取,避免出現不準確的資訊。