dig 簡明教學

2023-10-18 21:00:23

哈嘍大家好,我是鹹魚

不知道大家在日常學習或者工作當中用 dig 命令多不多

dig 是 Domain Information Groper 的縮寫,對於網路管理員和在域名系統(DNS)領域工作的小夥伴來說,它是一個非常常見且有用的工具。

無論是簡單的 DNS 解析查詢還是更高階的故障排除和分析,dig 都能夠勝任

那麼今天鹹魚將和大家一起了解一下 dig 命令的一些常見用法以及範例

除了 dig 命令,還有一種跟 dig 功能是差不多的 命令 nslookup

安裝

如果 Linux 發行版沒有安裝 dig 命令,則可以通過下面的命令來安裝

  • Debian 和 基於 Debian 的發行版
apt install dnsutils
  • Red Hat 和基於 RHEL 的發行版
dnf install bind-utils
# 或
yum install bind-utils
  • Arch Linux 和基於 Arch 的發行版
pacman -S dnsutils

以我的測試環境為例(CentOS 7.9)

常見用法

# 基本語法
dig [@server] [name] [type]
  • @server:請求所指向的 DNS 伺服器的主機名或IP地址。如果沒有指定 DNS 伺服器,則使用系統當前設定的 DNS 伺服器
  • name :要查詢的域名
  • type :要檢索的 DNS 記錄的型別,預設為 A 記錄型別

比如說我想解析 www.baidu.com 這個域名,指定使用 Google 的 dns 伺服器(8.8.8.8)

# A 記錄
dig @8.8.8.8 www.baidu.com

如果要查詢 MX 記錄

dig @8.8.8.8 www.baidu.com MX

前面我們講到,dig 命令會在 ANSWER 部分中預設顯示 A 記錄,下面我們來看下命令輸出的資訊

可以看到一共有五列,我們以最後一行行為例:

  • 第一列 www.wshifen.com:要查詢的域名
  • 第二列 192 :生存週期,告訴 DNS 解析器在請求一個新查詢之前快取查詢多長時間
  • 第三列 IN:查詢的類,IN 指網際網路
  • 第四列 A:DNS 查詢型別( A, AAAA, CNAME, MX, NS, PTR, CERT, SRV, TXT, SOA 等)
  • 第五列 104.193.88.77:域名關聯的 IP 地址

由前面的輸出資訊我們可以看到,內容還是挺多的,這時候有小夥伴會想:如何減少 dig 命令輸出的內容呢?我只想要最有用的,其他的我看得頭昏眼花

可以加上 +nocomments 選項

dig @8.8.8.8 www.baidu.com +nocomments


可以看到,加上 +nocomments 選項後返回的內容有一部分註釋是被去掉了的

這時候有的小夥伴還會說:不行不行,資訊還是太多了,我只要 ANSWER 部分。該如何讓命令只輸出 ANSWER 部分呢?

dig www.baidu.com +noall +answer


可以看到,加了 +noall +answer 選項之後,會顯示出乾淨且易於閱讀的內容

如果我只想要返回解析出來的結果呢?可以使用 +short 選項

dig www.baidu.com +short

進階用法

  • 指定返回型別資訊

前面我們提到過,DNS 記錄的型別(type)有很多種,例如 A, AAAA, CNAME, MX, NS, PTR, CERT, SRV, TXT, SOA 等

我們可以在命令的末尾加上對應的型別名以此來返回解析後特定型別資訊

# 返回 MX 型別
dig www.baidu.com MX

# 返回 CNAME 型別
dig www.baidu.com CNAME

或者使用特殊關鍵字 ALL 將所有型別記錄放在一起

# 將會返回所有型別資訊
dig www.baidu.com ALL
  • 檢視 DNS 解析過程

如果我們不確定 DNS 設定在哪裡有問題,我們可以使用 dig 命令來檢視 DNS 解析的每一過程,只需要加上 +trace 選項即可

dig www.baidu.com +trace

  • DNS 反向查詢

DNS 正向查詢就是通過域名找解析 IP;反向查詢就是通過 IP 地址找域名

# 查詢 ip 95.217.163.246 對應的域名
dig -x 95.217.163.246

  • 批次查詢

有小夥伴會想:我每次查詢一個域名效率太慢了,我能不能一次查詢多個域名呢?

是可以的,dig 是支援批次查詢的

首先我們把要查詢的域名放在一個檔案裡面,每行一個

[root@localhost ~]# cat domains.txt 
www.baidu.com
archlinux.org

然後執行 dig 命令的時候加上 -f 選項

# 加上 +short 簡化輸出內容
dig -f domains.txt +short

修改 dig 預設選項

前面我們在使用 dig 命令的時候,為了簡化輸出資訊每次敲命令都得帶上+nocomments 選項

那我們能不能把這個選項設定成預設值,這樣在敲命令的時候就不需要額外加上這個選項了

答案是可以的,我們需要在家目錄下建立一個 ~/.digrc 檔案,然後新增選項

[root@localhost ~]# cat ~/.digrc 
+nocomments
+short

這樣我們執行 dig 命令的時候就算沒加上去,也會預設使用這兩個選項