Linux 中的 Dig 命令(DNS 查找)
Dig (Domain Information Groper) 是一个强大的命令行工具,用于查询 DNS 名称服务器。
dig
命令允许您查询有关各种 DNS 记录的信息,包括主机地址、邮件交换和名称服务器。由于其灵活性和易用性,它是系统管理员最常用的解决 DNS 问题的工具。
本教程通过实际示例和最常见的 dig
选项的详细说明来说明如何使用 dig
实用程序。
安装dig
要检查 dig
命令在您的系统类型上是否可用:
dig -v
输出应如下所示:
输出
DiG 9.11.3-1ubuntu1.1-Ubuntu
如果dig
不存在于您的系统中,上面的命令将打印“dig: command not found”。 dig
工具可以使用发行版的包管理器安装。
在Ubuntu和Debian上安装dig
sudo apt update && sudo apt install dnsutils
在CentOS和Fedora上安装dig
sudo yum install bind-utils
在Arch Linux上安装dig
sudo pacman -S bind-tools
理解dig
输出
在其最简单的形式中,当用于在没有任何附加选项的情况下查询单个主机(域)时,dig
命令非常冗长。
在以下示例中,我们在 linux.org
域上执行:
dig linux.org
输出应如下所示:
让我们一节一节地去解释dig
命令的输出。
输出的第一行打印了已安装的
dig
版本,以及查询的域名。第二行显示全局选项(默认情况下,只有cmd)。; <<>> DiG 9.13.3 <<>> linux.org ;; global options: +cmd
如果你不希望这些行被包括在输出中,请使用
+nocmd
选项。这个选项必须是dig
命令之后的第一个选项。下一节包括从被请求机构(DNS服务器)收到的答复的技术细节。头部显示了操作码(由
dig
执行的行动)和行动的状态。在这个例子中,状态是NOERROR
,这意味着被请求的机构已毫无问题地为查询提供服务。;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37159 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5
这一部分可以用
+nocomments
选项来删除,这也会使其他一些部分的标题失效。“OPT”伪部分仅在
dig
实用程序的较新版本中显示。您可以在此处阅读有关 DNS 扩展机制 (EDNS) 的更多信息 .;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096
要从输出中排除这部分内容,请使用
+noedns
选项。在 "QUESTION "部分,
dig
显示查询(问题)。默认情况下,dig
要求提供A记录。;; QUESTION SECTION: ;linux.org. IN A
你可以使用
+noquestion
选项禁用这部分内容。"ANSWER "部分为我们提供了问题的答案。正如我们已经提到的,默认情况下
dig
会请求A记录。在这里,我们可以看到,域名linux.org
指向104.18.59.123
的IP地址。;; ANSWER SECTION: linux.org. 300 IN A 104.18.59.123 linux.org. 300 IN A 104.18.58.123
通常情况下,你不想关闭答案,但你可以使用
+noanswer
选项从输出中删除这部分内容。AUTHORITY "部分告诉我们,哪些服务器回应了有关被查询域的DNS查询。
;; AUTHORITY SECTION: linux.org. 86379 IN NS lia.ns.cloudflare.com. linux.org. 86379 IN NS mark.ns.cloudflare.com.
你可以使用
+noauthority
选项禁用这部分的输出。"ADDITIONAL"部分为我们提供了DNS服务器的IP地址信息。
;; ADDITIONAL SECTION: lia.ns.cloudflare.com. 84354 IN A 173.245.58.185 lia.ns.cloudflare.com. 170762 IN AAAA 2400:cb00:2049:1::adf5:3ab9 mark.ns.cloudflare.com. 170734 IN A 173.245.59.130 mark.ns.cloudflare.com. 170734 IN AAAA 2400:cb00:2049:1::adf5:3b82
+noadditional
选项禁用了回复的附加部分。dig
输出的最后一节包括关于查询的统计数字。;; Query time: 58 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Oct 12 11:46:46 CEST 2018 ;; MSG SIZE rcvd: 212
你可以用
+nostats
选项禁用这部分内容。
仅仅打印回答
一般来说,你会希望只得到一个简短的dig
查询回答。
1.获得一个简短的回答
要想得到一个简短的回答,请使用+short
选项。
dig linux.org +short
输出
104.18.59.123
104.18.58.123
输出结果将只包括A记录的IP地址。
2.获得详细的回答
要想得到更详细的回答,可以用+noall
选项关闭所有的结果,然后用+answer
选项只打开回答部分。
dig linux.org +noall +answer
输出
; <<>> DiG 9.13.3 <<>> linux.org +noall +answer
;; global options: +cmd
linux.org. 67 IN A 104.18.58.123
linux.org. 67 IN A 104.18.59.123
查询特定的名称服务器
默认情况下,如果没有指定名称服务器,dig
就会使用/etc/resolv.conf
文件中列出的服务器。
要指定执行查询的名称服务器,请使用@
(at)符号,后面跟上名称服务器的IP地址或主机名。
例如,要查询谷歌名称服务器(8.8.8.8)有关linux.org
域名的信息,你会使用。
dig linux.org @8.8.8.8
输出
; <<>> DiG 9.13.3 <<>> linux.org @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39110
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;linux.org. IN A
;; ANSWER SECTION:
linux.org. 299 IN A 104.18.58.123
linux.org. 299 IN A 104.18.59.123
;; Query time: 54 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Oct 12 14:28:01 CEST 2018
;; MSG SIZE rcvd: 70
查询一个记录类型
Dig允许你通过将记录类型附加到查询的末尾来执行任何有效的DNS查询。在下一节中,我们将向你展示如何搜索最常见的记录,如A(IP地址)、CNAME(规范名称)、TXT(文本记录)、MX(邮件交换器)和NS(名称服务器)等例子。
1.查询A记录
要获得一个域名的所有地址的列表,请使用a
选项。
dig +nocmd google.com a +noall +answer
输出
google.com. 128 IN A 216.58.206.206
正如你已经知道的,如果没有指定DNS记录类型,dig
将请求A记录。你也可以不指定a
选项来查询A记录。
2.查询CNAME记录
要找到别名的域名,请使用cname
选项。
dig +nocmd mail.google.com cname +noall +answer
输出
mail.google.com. 553482 IN CNAME googlemail.l.google.com.
3.查询TXT记录
使用txt
选项来检索一个特定域的所有TXT记录。
dig +nocmd google.com txt +noall +answer
输出
google.com. 300 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com. 300 IN TXT "v=spf1 include:_spf.google.com ~all"
google.com. 300 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
4.查询MX记录
要获得一个特定域名的所有邮件服务器的列表,请使用mx
选项。
dig +nocmd google.com mx +noall +answer
输出
google.com. 494 IN MX 30 alt2.aspmx.l.google.com.
google.com. 494 IN MX 10 aspmx.l.google.com.
google.com. 494 IN MX 40 alt3.aspmx.l.google.com.
google.com. 494 IN MX 50 alt4.aspmx.l.google.com.
google.com. 494 IN MX 20 alt1.aspmx.l.google.com.
5.查询NS记录
要找到我们特定域名的权威性名称服务器,请使用ns
选项。
dig +nocmd google.com ns +noall +answer
输出
google.com. 84527 IN NS ns1.google.com.
google.com. 84527 IN NS ns2.google.com.
google.com. 84527 IN NS ns4.google.com.
google.com. 84527 IN NS ns3.google.com.
6.查询所有记录
使用any
选项可以获得一个特定域名的所有DNS记录的列表。
dig +nocmd google.com any +noall +answer
输出
google.com. 299 IN A 216.58.212.14
google.com. 299 IN AAAA 2a00:1450:4017:804::200e
google.com. 21599 IN NS ns2.google.com.
google.com. 21599 IN NS ns1.google.com.
google.com. 599 IN MX 30 alt2.aspmx.l.google.com.
google.com. 21599 IN NS ns4.google.com.
google.com. 599 IN MX 50 alt4.aspmx.l.google.com.
google.com. 599 IN MX 20 alt1.aspmx.l.google.com.
google.com. 299 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
google.com. 21599 IN CAA 0 issue "pki.goog"
google.com. 599 IN MX 40 alt3.aspmx.l.google.com.
google.com. 3599 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com. 21599 IN NS ns3.google.com.
google.com. 599 IN MX 10 aspmx.l.google.com.
google.com. 3599 IN TXT "v=spf1 include:_spf.google.com ~all"
google.com. 59 IN SOA ns1.google.com. dns-admin.google.com. 216967258 900 900 1800 60
反向的DNS查询
要查询与特定IP地址相关联的主机名,请使用-x
选项。
例如,要对208.118.235.148
进行反向查询,你可以键入。
dig -x 208.118.235.148 +noall +answer
正如你在下面的输出中看到的那样,IP地址208.118.235.148
与主机名wildebeest.gnu.org
相关联。
输出
; <<>> DiG 9.13.3 <<>> -x 208.118.235.148 +noall +answer
;; global options: +cmd
148.235.118.208.in-addr.arpa. 245 IN PTR wildebeest.gnu.org.
批量查询
如果你想查询大量的域名,你可以把它们添加到一个文件中(每行一个域名),并使用-f
选项,后面跟上文件名。
在下面的例子中,我们查询的是domains.txt
文件中列出的域。
lxer.com
linuxtoday.com
tuxmachines.org
dig -f domains.txt +short
输出
108.166.170.171
70.42.23.121
204.68.122.43
.digrc文件
可以通过在${HOME}/.digrc
文件中设置每个用户的选项来控制dig
命令的行为。
如果.digrc
文件存在于用户的主目录中,它所指定的选项将在命令行参数之前被应用。
例如,如果你想只显示答案部分,请打开你的文本编辑器,并创建以下~/.digrc
文件。
+nocmd +noall +answer
总结
dig
是一个命令行工具,用于查询DNS信息和排除DNS相关问题的故障。
如果你有任何问题或反馈意见,请随时留言。