在Linux中使用Dig命令查找DNS信息
Dig域信息收集程序是用于查询DNS域名服务器的强大命令行工具。
使用dig
命令,您可以查询有关各种DNS记录的信息,包括主机地址,邮件交换和域名服务器。由于它的灵活性和易用性,它是系统管理员中最常用的用于解决DNS问题的工具。
在本教程中,我们将通过实际示例和最常见的dig
选项的详细说明,向您展示如何使用dig
命令。
安装dig
要检查dig
命令在您的系统上是否可用:
dig -v
输出应如下所示:
DiG 9.11.3-1ubuntu1.1-Ubuntu
如果系统上没有dig
,则上面的命令将显示dig: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 9.11.3-1ubuntu1.12-Ubuntu <<>> linux.org;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43105
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;linux.org. IN A
;; ANSWER SECTION:
linux.org. 310 IN A 104.27.167.219
linux.org. 310 IN A 104.27.166.219
linux.org. 310 IN A 172.67.153.210
;; Query time: 190 msec
;; SERVER: 192.168.42.129#53(192.168.42.129)
;; WHEN: Wed Dec 02 20:15:05 CST 2020
;; MSG SIZE rcvd: 86
让我们逐节介绍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
默认情况下, OPT部分仅在较新版本的dig命令中显示,请使用+nocomments
选项,这也会禁用其他部分的标头。您可以在此处上详细了解DNS扩展机制EDNS
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096
要排除在输出中,请使用+noedns
选项。
在QUESTION部分,dig
显示了我们的查询。默认情况下,dig
请求A记录。
;; QUESTION SECTION:;linux.org. IN A
您可以使用+noquestion
选项禁用此部分。
ANSWER部分为我们提供了我们QUESTION的答案。正如我们已经提到的,默认情况下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部分为我们提供了有关AUTHORITY部分中所示的权威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
选项禁用此部分。
仅打印应答ANSWER
在大多数情况下,您只想快速查询自己的dig查询。
简短应答
要简短查询,请使用+short
选项:
dig linux.org +short
104.18.59.123104.18.58.123
输出将仅包含A记录的IP地址。
获取详细的应答
要获得更详细的应答,请使用+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地址或主机名。
例如,要向Google名称服务器(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(名称服务器)。
查询A记录
要获取域名的所有地址的列表,请使用a
选项:
dig +nocmd google.com a +noall +answer
google.com. 128 IN A 216.58.206.206
如您所知,如果未指定DNS记录类型,则dig将请求A记录。您也可以在不指定a
选项的情况下查询A记录。
查询CNAME记录
要找到域名别名,请使用cname
选项:
dig +nocmd mail.google.com cname +noall +answer
mail.google.com. 553482 IN CNAME googlemail.l.google.com.
查询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"
查询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.
查询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.
查询所有记录
使用any
选项可获取指定域的所有DNS记录的列表:
dig +nocmd google.com any +noall +answer
google.com. 299 IN A 216.58.212.14google.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
文件中列出的域。
domains.txt
lxer.comlinuxtoday.com
tuxmachines.org
dig -f domains.txt +short
108.166.170.17170.42.23.121
204.68.122.43
.digrc文件
可以通过在${HOME}/.digrc
文件中设置每个用户的选项来控制dig命令的行为。
如果用户的主目录中存在.digrc
文件,则在命令行参数之前应用文件中指定的选项。
例如,如果只想显示答案部分,请打开文本编辑器并创建以下~/.digrc
文件:
~/.digrc
+nocmd +noall +answer
结论
dig
是用于查询DNS信息并对DNS相关问题进行故障排除的命令行工具。
如果您有任何问题或反馈,请随时发表评论。
以上是 在Linux中使用Dig命令查找DNS信息 的全部内容, 来源链接: utcz.com/z/507449.html