Dig( Domain Information Groper)是一个功能强大的命令行工具,可以用于DNS 记录查询。使用 dig 命令,可以查询各种 DNS 记录的信息,包括:主机名称记录(A、AAAA)、邮件交换记录(MX)和别名记录(CNAME)等等。由于其灵活性和易用性,让它成为了 Linux 系统管理员用于排错 DNS 问题的最常用工具(没有之一)。
由于笔者用习惯了 Windows 下的 nslookup 命令行工具,对 dig 的使用次数也少,刚上手时非常之不习惯。但用上手之后,可以负责地向大家推荐:抛弃 windows 直接换用 linux 吧。(Windows 也可以使用 dig,安装方法请自己 Google。)
安装dig
要检查 Linux 系统中是否有 dig 命令,可以在「终端」中执行:
dig -v
如果您的系统没有自带 dig 工具,可能会提示 dig: command not found
,此时您可以使用以下方式进行安装。
Ubuntu和Debian安装dig
sudo apt install dnsutils
CentOS和Fedora安装dig
sudo yum install bind-utils
了解Dig输出
当不带参数使用 dig 查询单个主机(域名)时,它的输出非常详细,例如查询本博客域名 awsl.blog
dig awsl.blog
下面让我们逐步介绍并解释 dig 命令的输出:
输出的第部分会打印出已安装的 dig 版本以及调用的查询,第二行显示全局选项(默认情况下仅为 cmd)。
; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> awsl.blog ;; global options: +cmd
如果您不希望这些行包含在输出中,可以使用
+nocmd
选项。 (此选项必须是 dig 命令后的第一个参数。)本节输出包括从有关权威机构(DNS 服务器)收到响应的详细技术信息。本节第一行是由 dig 执行操作的「操作码」和「操作状态」的「标头」,上述示例中的「操作状态」是
NOERROR
,这意味着所请求的 DNS 服务器可以无障碍地服务于查询。;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61713 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
您也可以用
+comments
参数隐藏本节输出,使用此参数时还会禁用一些其它节输出的标题。在使用较新版本 dig 时,会显示本部分输出,您可以在此节输出中查看有关 DNS 扩展机制(EDNS)的更多信息。
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494
要隐藏此部分输出可以使用
+noedns
参数。此部分输出会显示 dig 将要查询的内容,默认情况下 dig 会请求 A 记录。
;; QUESTION SECTION: ;awsl.blog. IN A
用户可以使用
+noquestion
参数禁用此部分输出。默认情况下 dig 会请求 A 记录。 在这种情况下,我们可以看到 awsl.blog 指向 IP 地址 13.70.6.100
;; ANSWER SECTION: awsl.blog. 10 IN A 13.70.6.100
这是 dig 输出的最后一部分内容,其中包括有关查询的统计信息。
;; Query time: 30 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Mon Oct 05 18:42:51 CST 2020 ;; MSG SIZE rcvd: 54
您可以使用
+nostats
参数禁用此部分输出。
仅输出查询的响应(答案)
在绝大多数情况下,我们都只使用 dig 查询相应的 DNS 记录,而不需要太多复杂的、不相关的响应和输出,此时就可以使用以下两种方式。
1. 获取简短响应结果
如果只想获取 DNS 查询的简短响应,可以使用 +short
参数,例如:
dig awsl.blog +short
输出将仅包括查询 awsl.blog IP 地址时响应的 CNAME
记录(如果存在)和最终的 A
记录。
2. 获取详细响应结果
要获取 DNS 查询的详细响应,可以先使用 +noall
参数关闭所有结果,再使用 +answer
参数打开部分结果。
dig awsl.blog +noall +answer
使用特定DNS服务器
默认情况下,如果未指定名称服务器,dig 将主动使用 /etc/resolv.conf 文件中列出的 DNS 服务器来进行查询。如果要使用特定的 DNS 服务器进行记录查询,可以使用 @ 后跟 DNS 服务器 IP 地址的方式来强制使用某 DNS Server。
例如,要使用 Google DNS(8.8.8.8)或 CloudFlare DNS(1.1.1.1)查询 awsl.blog域名,可以使用:
dig awsl.blog @8.8.8.8
查询特定记录类型
与 Windows 下的 nslookup
命令行类似,dig
工具也允许用户查询指定的 DNS 记录类型。下面系统极客就为大家介绍,如果查询常见的 DNS 记录类型,例如:A
(IPv4 地址)、CNAME
(别名记录)、TXT
(文本记录)、MX
(邮件交换记录)和 NS
(名称服务器)。
1.查询A
记录
要获取域名的所有 IP 地址列表,请使用 a
参数:
dig +nocmd awsl.blog a +noall +answer
如果未指定 DNS 记录类型,dig 也会默认将请求A
记录。
- 查询
CNAME
记录
要查找「别名记录」,请使用cname
选项:
dig +nocmd awsl.blog cname +noall +answer
3.查询TXT
记录
可以使用 txt
参数检索特定域的所有TXT 记录:
dig +nocmd test.words.awsl.tech txt +noall +answer
4.查询MX记录
要获取特定域的所有邮件服务器列表,请使用 mx 参数:
dig +nocmd awsl.blog mx +noall +answer
5.查询NS记录
要查找特定域的权威名称服务器,请使用 ns 参数:
dig +nocmd awsl.blog ns +noall +answer
6.查询所有记录
使用 any 参数可以获取特定域的所有 DNS 记录列表:
dig +nocmd awsl.blog any +noall +answer
PTR反向DNS查询
要查询与特定 IP 地址关联的主机名,请使用 -x 参数。例如,要在 1.1.1.1 上执行反向查询,可以使用:
dig +nocmd -x 1.1.1.1 +noall +answer
从输出中可以看出,IP 地址1.1.1.1 与主机名one.one.one.one. 相关联。
dig批量DNS查询
如果要对大量域名进行 DNS 查询,可以将其全部写入到一个文本文件中(一行一个),然后使用 -f
参数,再跟止文件名即可,例如:
dig -f domains.txt +short
.digrc
文件
我们还可通过不同用户的 ${HOME}/.digrc
文件来控制 dig 命令的行为,如果 .digrc
文件存在于用户的主目录中,则 dig 可以读取其中的参数,而无需用户在执行命令时手动添加。例如,直接在 ~/.digrc
文件中写入 +nocmd +noall +answer
参数。
转载来源 https://www.sysgeek.cn/linux-dig/ ,有删改。
本篇文章采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 许可协议进行许可。
转载或引用本文时请遵守许可协议,注明出处。