如何在 Linux 上使用 dig 命令

已發表: 2022-01-29
Linux 系統上的風格化終端窗口。
Fatmawati Achmad Zaenuri/Shutterstock

Linux dig命令允許您查詢 DNS 服務器並執行 DNS 查找。 您還可以找到 IP 地址返回的域。 我們會告訴你怎麼做!

dig 命令的工作原理

人們使用 Linux dig命令來查詢域名系統 (DNS) 服務器。 dig是 Domain Information Groper 的首字母縮寫詞。 使用dig ,您可以查詢 DNS 服務器以獲取有關各種 DNS 記錄的信息,包括主機地址、郵件交換、名稱服務器和相關信息。 它旨在成為診斷 DNS 問題的工具。 但是,您可以使用它來探索並了解有關 DNS 的更多信息,DNS 是保持 Internet 路由流量的中央系統之一。

互聯網使用互聯網協議 (IP) 地址來識別網絡周圍的“位置”,但人們使用域名。 當您在應用程序(如 Web 瀏覽器或 SSH 客戶端)中鍵入域名時,必須將某些內容從域名轉換為實際的 IP 地址。 這就是域名系統的用武之地。

當您將域名用於任何連接互聯網的程序時,您的本地路由器無法解析它(除非它是從先前的請求中緩存的)。 因此,您的路由器查詢您的 Internet 服務提供商 (ISP) 的 DNS 服務器,或您已配置系統使用的任何其他服務器。 這些稱為 DNS 前驅服務器。

如果 DNS 服務器最近收到來自同一台計算機上其他人的相同請求,則答案可能在緩存中。 如果是這種情況,它只是將相同的信息發送回您的程序。

如果 DNS 前體服務器無法在其緩存中找到域,它會聯繫 DNS 根名稱服務器。 根服務器不會保存將域名解析為 IP 地址所需的信息,但它會保存可以幫助您處理請求的服務器列表。

廣告

根服務器查看您的域名所屬的頂級域,例如 .COM、.ORG、.CO.UK 等。 然後,它將處理這些類型的域的頂級域服務器列表發送回 DNS 前體服務器。 然後,DNS 前驅服務器可以再次向頂級域服務器發出請求。

頂級域服務器將權威名稱服務器的詳細信息(存儲域的詳細信息)發送回 DNS 前體服務器。 然後,DNS 服務器查詢託管您最初輸入程序的域的區域的權威名稱服務器。 權威名稱服務器將 IP 地址發送回 DNS 服務器,然後由 DNS 服務器將其發送回您。

安裝挖

dig已經安裝在我們的 Ubuntu 18.04 和 Fedora 30 計算機上。 但是,我們必須使用以下命令將其安裝在 Manjaro 18.04 計算機上:

 sudo pacman -Sy 綁定工具

開始挖掘

在我們的第一個示例中,我們將返回與域名關聯的 IP 地址。 通常,多個 IP 地址與一個域名相關聯。 例如,如果使用負載平衡,這通常會發生。

我們使用+short查詢選項,如下所示,它給了我們一個簡潔的響應:

 挖掘 howtogeek.com +short 

為我們列出了與 howtogeek.com 域關聯的所有 IP 地址。 另一方面,如果我們使用+short查詢選項,輸出會非常冗長。

廣告

因此,我們鍵入以下內容以通過less管道:

 挖howtogeek.com | 較少的

輸出顯示在less中,如下所示。

這是完整的清單:

 ; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com
;; 全局選項:+cmd
;; 得到答案:
;; ->>HEADER<<- 操作碼:QUERY,狀態:NOERROR,id:12017
;; 標誌:qr rd ra; 查詢:1,答案:4,權限:0,附加:1

;; 選擇偽部分:
; EDNS:版本:0,標誌:; UDP:65494
;; 問題部分:
;howtogeek.com。 在一個

;; 答案部分:
howtogeek.com。 3551 在 151.101.194.217
howtogeek.com。 3551 IN A 151.101.130.217
howtogeek.com。 3551 在 151.101.66.217
howtogeek.com。 3551 在 151.101.2.217

;; 查詢時間:0毫秒
;; 服務器:127.0.0.53#53(127.0.0.53)
;; 時間:2020 年 3 月 22 日星期日 07:44:37 EDT
;; 味精大小 rcvd: 106

讓我們一塊一塊地剖析它。

標題

首先,讓我們看一下我們在 Header 中的內容:

 ; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com
;; 全局選項:+cmd
;; 得到答案:
;; ->>HEADER<<- 操作碼:QUERY,狀態:NOERROR,id:12017
;; 標誌:qr rd ra; 查詢:1,答案:4,權限:0,附加:1

現在,這就是所有這些的含義:

  • 第一行: dig的版本和查詢的域。
  • 全局選項:正如我們將看到的,您可以使用dig同時查詢多個域。 此行顯示已應用於所有域查詢的選項。 在我們的簡單示例中,它只是默認的+cmd (命令)選項。
  • 操作碼:查詢:這是所請求的操作類型,在本例中為query 。 如果您只是測試 DNS 系統的狀態,此值也可以是iquery用於反向查詢,或者是status
  • 狀態:無錯誤:沒有錯誤,請求已正確解決。
  • ID:12017 :這個隨機 ID 將請求和響應聯繫在一起。
  • 標誌: qr rd ra:這些代表queryrecursion desiredrecursion available 。 遞歸是 DNS 查找的一種形式(另一種是迭代的)。 您可能還會看到AA ,它代表權威答案,這意味著權威名稱服務器提供了響應。
  • Query: 1:本次會話的查詢數,為1。
  • 答案:4:這個響應中的答案數,即四個。
  • 權威:0:來自權威名稱服務器的答案數,在這種情況下為零。 響應是從 DNS 前體服務器的緩存中返回的。 回復中不會有權威部分。
  • 附加: 1:有一條附加信息。 (奇怪的是,除非該值為 2 或更高,否則不會列出任何內容。)

選擇偽截面

接下來,我們在 Opt Pseudo 部分看到以下內容:

 ;; 選擇偽部分:
; EDNS:版本:0,標誌:; UDP:65494

讓我們分解一下:

  • EDNS:版本 0:正在使用的 DNS 擴展系統版本。 EDNS 通過擴展用戶數據報協議 (UDP) 數據包的大小來傳輸擴展數據和標誌。 這由可變大小標誌指示。
  • 標誌:沒有使用標誌。
  • udp : 4096: UDP 數據包大小。

問題部分

在問題部分,我們看到以下內容:

 ;; 問題部分:
;howtogeek.com。 在一個

這是什麼意思:

  • howtogeek.com:我們查詢的域名。
  • IN:我們正在做一個互聯網課程查詢。
  • A:除非我們另有說明,否則dig會向 DNS 服務器請求一條 A(地址)記錄。

回答部分

答案部分包含我們從 DNS 服務器收到的以下四個答案:

 howtogeek.com。 3551 在 151.101.194.217
howtogeek.com。 3551 IN A 151.101.130.217
howtogeek.com。 3551 在 151.101.66.217
howtogeek.com。 3551 在 151.101.2.217

以下是這些答案的含義:

  • 3551:這是生存時間 (TTL),一個 32 位有符號整數,用於保存可以緩存記錄的時間間隔。 當它過期時,數據必須用於響應請求,直到它被 DNS 服務器刷新。
  • IN:我們做了一個互聯網課程查詢。
  • A:我們要求 DNS 服務器提供 A 記錄。

統計科

統計是最後一部分,它包含以下信息:

 ;; 查詢時間:0毫秒 
;; 服務器:127.0.0.53#53(127.0.0.53) 
;; 時間:2020 年 3 月 22 日星期日 07:44:37 EDT 
;; 味精大小 rcvd: 106

這是我們所擁有的:

  • 查詢時間:0 毫秒:獲得響應所需的時間。
  • SERVER: 127.0.0.53#53(127.0.0.53):響應的 DNS 服務器的 IP 地址和端口號。 在這種情況下,它指向本地緩存存根解析器。 這會將 DNS 請求轉發到配置的任何上游 DNS 服務器。 在 Manajro 測試計算機上,此處列出的地址是 8.8.8.8#53,這是 Google 的公共 DNS 服務。
  • 時間:2020 年 3 月 22 日星期日 07:44:37 EDT:提出請求的時間。
  • MSG SIZE rcvd:106:從 DNS 服務器接收到的消息的大小。

有選擇性

你不必滿足於守口如瓶和喋喋不休的兩個極端。 dig命令允許您有選擇地從結果中包含或排除部分。

以下查詢選項將從結果中刪除該部分:

  • +nocomments:不顯示註釋行。
  • +noauthority:不顯示權限部分。
  • +noadditional:不顯示附加部分。
  • +nostats:不顯示統計數據部分。
  • +noanswer:不顯示答案部分。
  • +noall:什麼都不顯示!
廣告

+noall查詢選項通常與上述選項之一結合使用,以在結果中包含一個部分。 因此,您可以使用+noall將它們全部關閉,而不是輸入一長串查詢選項來關閉多個部分。

然後,您可以使用以下包含性查詢選項重新打開您想要查看的內容:

  • +comments:顯示註釋行。
  • +authority:顯示權限部分。
  • +附加:顯示附加部分。
  • +stats:顯示統計數據部分。
  • +answer:顯示答案部分。
  • +all:顯示所有內容。

我們鍵入以下內容以提出請求並排除註釋行:

 挖掘 howtogeek.com +nocomments 

如果我們單獨使用+noall查詢選項,如下所示,我們不會得到任何有用的輸出:

 挖掘 howtogeek.com +noall 

我們可以選擇性地添加我們想要查看的部分。 要添加答案部分,我們鍵入以下內容:

 挖掘 howtogeek.com +noall +answer 

如果我們輸入以下內容來打開+stats ,我們還會看到統計部分:

 挖掘 howtogeek.com +noall +answer +stats 

廣告

+noall +answer組合經常使用。 您可以根據需要將其他部分添加到命令行。 如果您想避免每次使用dig時都在命令行中鍵入+noall +answer ,您可以將它們放在一個名為“.digrc”的配置文件中。 它位於您的主目錄中。

我們鍵入以下內容以使用echo創建一個:

 echo "+noall +answer" > $HOME/.digrc

然後我們可以鍵入以下內容來檢查其內容:

 貓.digrc 

這兩個選項現在將應用於dig的所有未來用途,如下所示:

 挖掘 ubuntu.org
 挖掘 linux.org
 挖github.com 

dig配置文件將用於本文中的其餘示例。

DNS 記錄

返回到您的dig請求的信息是從 DNS 服務器上保存的不同類型的記錄中提取的。 除非我們要求不同的東西,否則dig查詢 A(地址)記錄。 以下是dig常用的記錄類型:

  • A 記錄:將域鏈接到 IP 版本 4 地址。
  • MX 記錄:郵件交換記錄將發送到域的電子郵件直接發送到正確的郵件服務器。
  • NS 記錄:名稱服務器記錄將域(或子域)委託給一組 DNS 服務器。
  • TXT 記錄:文本記錄存儲有關域的基於文本的信息。 通常,它們可能用於抑制欺騙或偽造的電子郵件。
  • SOA 記錄:權限記錄的開始可以保存有關域的大量信息。 在這裡,您可以找到主名稱服務器、責任方、更改時間戳、區域刷新頻率以及重試和放棄的一系列時間限制。
  • TTL:生存時間是每個 DNS 記錄的設置,它指定允許 DNS 前體服務器緩存每個 DNS 查詢的時間。 當該時間到期時,必須為後續請求刷新數據。
  • ANY:這告訴dig返回它可以返回的所有類型的 DNS 記錄。
廣告

指定A記錄類型不會改變默認動作,即查詢地址記錄並獲取IP地址,如下圖:

 挖redhat.com A 

要查詢郵件交換記錄,我們使用以下 MX 標誌:

 挖yahoo.com MX 

名稱服務器標誌返回與頂級域關聯的根名稱服務器的以下名稱:

 挖 fedora.com NS 

要查詢權限記錄的開始,我們輸入以下 SOA 標誌:

 挖掘 manjaro.com SOA 

TTL 標誌將向我們顯示 DNS 服務器緩存中數據的生存時間。 如果我們發出一系列請求,我們會看到生存時間減少到零,然後跳回到它的起始值。

我們輸入以下內容:

 挖 usa.gov TTL 

要查看文本記錄,我們輸入 TX 標誌:

 挖美國.gov TXT 

指定 DNS 服務器

如果您想為您的請求使用特定的 DNS 服務器,您可以使用 at 符號 ( @ ) 將其作為命令行參數傳遞給dig

廣告

使用默認 DNS 服務器(見下文), dig引用位於 127.0.0.53 的本地緩存存根解析器。

 挖掘 usa.gov +stats

現在,我們鍵入以下內容以使用位於 8.8.8.8 的 Google 公共 DNS 服務器:

 挖掘@8.8.8.8 usa.gov +stats 

將 dig 與多個域一起使用

我們可以在命令行中傳遞多個域進行dig ,如下圖:

 挖掘 ubuntu.org fedora.org manjaro.com 

如果您定期檢查一組域,則可以將它們存儲在文本文件中並將其傳遞給dig 。 將依次檢查文件中的所有域。

我們的文件名為“domains.txt”。 我們將使用cat顯示其內容,然後使用-f (文件)選項將其傳遞給dig 。 我們輸入以下內容:

 貓域.txt
 挖 -f 域.txt 

反向 DNS 查找

如果您有一個 IP 地址並想知道它的去向,您可以嘗試反向 DNS 查找。 如果它解析為使用 DNS 服務器註冊的服務器,您可能能夠找到它的域。

廣告

是否可以取決於 PTR(指針記錄)的存在。 PTR 將 IP 地址解析為完全限定的域名。 但是,由於這些不是強制性的,它們並不總是存在於域中。

讓我們看看我們是否可以找出IP地址209.51.188.148將我們帶到哪裡。 我們使用-x (反向查找)選項鍵入以下內容:

 挖 -x 209.51.188.148 

快! IP 地址解析為 gnu.org。

因為 PTR 是 DNS 記錄,而且我們知道dig可以請求指定的 DNS 記錄,所以我們不能只要求dig為我們檢索 PTR 嗎? 是的,我們可以,但確實需要更多的工作。

我們必須以相反的順序提供IP地址並在末尾.in-addr.arpa ,如下所示:

 挖 ptr 148.188.51.209.in-addr.arpa 

廣告

我們得到相同的結果; 只是需要更多的努力。

你能挖一下它麼?

我們每天都在使用互聯網,好奇的人經常想知道,當我們在瀏覽器中輸入網站名稱時,魔法是如何發生的。 使用dig ,您可以探索網絡魔術的過程。

相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦