系统极客一直在努力
专注于操作系统及软件使用教程

如何使用 dig 命令在 Linux 中查询 DNS 记录

dig command

dig( Domain Information Groper)是一个功能强大的命令行工具,可以用于 DNS 记录查询。使用 dig 命令,可以查询各种 DNS 记录的信息,包括:主机名称记录(A、AAAA)、邮件交换记录(MX)和别名记录(CNAME)等等。由于其灵活性和易用性,让它成为了 Linux 系统管理员用于排错 DNS 问题的最常用工具没有之一。

由于笔者用习惯了 Windows 下的 nslookup 命令行工具,对 dig 的使用次数也少,刚上手时非常之不习惯。但用上手之后,可以负责地向大家推荐:抛弃 nslookup 直接换用 dig 吧

Windows 也可以使用 dig,安装方法请自己 Google。

安装 dig

要检查 Linux 系统中是否有 dig 命令,可以在「终端」中执行:

dig -v
查看 dig 版本
查看 dig 版本

如果你的系统没有自带 dig 工具,可能会提示 dig: command not found,可以使用 Linux 发行版的包管理器安装 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 查询单个主机(域名)时,它的输出非常详细,例如查询系统极客www.sysgeek.cn域名:

dig www.sysgeek.cn

输出结果看起来像这样:

dig 命令输出
dig 命令输出

让我们逐节来介绍并解释一下 dig 命令的输出:

1 输出的第一行会打印出已安装的 dig 版本,以及查询的域名;第二行显示全局选项(默认情况下,仅有 cmd)。

; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> www.sysgeek.cn
;; global options: +cmd

如果你不希望这些行被包括在输出中,请使用+nocmd参数。 (此参数必须是 dig 命令后的第一个参数)

2 本节输出包括从被请求机构(DNS 服务器)收到响应的详细技术信息。标题显示由 dig 执行操作的「操作码」和「操作状态」的「标头」,上述示例中的「操作状态」是NOERROR,这意味着被请求的 DNS 服务器可没有任何阻碍地提供查询。

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28706
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

也可以用+comments参数隐藏本节输出,使用此参数时还会禁用一些其它节输出的标题。

3「OPT」伪装部分仅在较新版本的 dig 工具中显示,你可以阅读更多关于 DNS(EDNS)的扩展机制

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494

要隐藏此部分输出可以使用+noedns参数。

4 在「QUESTION」部分输出会显示 dig 将要查询的内容,默认情况下 dig 会查询 A 记录。

;; QUESTION SECTION:
;www.sysgeek.cn.			IN	A

可以使用+noquestion参数禁用此部分输出。

5「ANSWER」部分为我们提供了查询的答案,正如我们已经提到的,默认情况下 dig 将请求 A 记录。 在这里,我们可以看到 www.sysgeek.cn 域名指向的 IP 地址。

;; ANSWER SECTION:
www.sysgeek.cn.		5	IN	CNAME	www.sysgeek.cn.dsa.dnsv1.com.cn.
www.sysgeek.cn.dsa.dnsv1.com.cn. 5 IN	CNAME	fb8aflno.slt-dk.sched.tdnsv8.com.
fb8aflno.slt-dk.sched.tdnsv8.com. 5 IN	A	116.55.252.186
fb8aflno.slt-dk.sched.tdnsv8.com. 5 IN	A	118.183.8.108

可以使用+noanswer参数删除此部分输出。

6 这是 dig 输出的最后一部分内容,其中包括有关查询的统计信息。

;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Thu Aug 11 22:11:59 CST 2022
;; MSG SIZE  rcvd: 164

您可以使用+nostats参数禁用此部分输出。

仅输出查询的响应答案

在绝大多数情况下,我们都只使用 dig 查询相应的 DNS 记录,而不需要太多复杂的、不相关的响应和输出,此时就可以使用以下两种方式。

获取简短响应结果

如果只想获取 DNS 查询的简短响应,可以使用+short参数,例如:

dig www.sysgeek.cn +short
dig 命令简短输出
dig 命令简短输出

输出将仅包括查询www.sysgeek.cn域名时响应的 CNAME 记录和最终的 A 记录。

获取详细响应结果

要获取 DNS 查询更的详细响应答案,可以先使用+noall参数关闭所有结果,再使用+answer参数打开结果部分。

dig www.sysgeek.cn +noall +answer
dig 详细响应结果
dig 详细响应结果

使用特定 DNS 服务器

默认情况下,如果未指定名称服务器,则 dig 使用/etc/resolv.conf文件中列出的服务器。

如果要使用特定的 DNS 服务器进行记录查询,可以使用 @ 后跟 DNS 服务器 IP 地址的方式来强制指定 DNS 服务器。

例如,要使用 Google DNS 8.8.8.8 或CloudFlare DNS 1.1.1.1查询www.sysgeek.cn域名,可以使用:

dig www.sysgeek.cn @8.8.8.8
dig 指定 DNS 服务器
dig 指定 DNS 服务器

使用 dig 命令查询特定记录类型

与 Windows 下的 nslookup 命令行类似,dig 工具也允许用户查询指定的 DNS 记录类型。下面系统极客就为大家介绍,如果查询常见的 DNS 记录类型,例如:A(IP 地址)、CNAME(别名记录)、TXT(文本记录)、MX(邮件交换记录)和 NS(名称服务器)。

查询 A 记录

要获取域名的所有 IP 地址列表,请使用a参数:

dig +nocmd www.sysgeek.cn a +noall +answer
使用 dig 查询 A 记录
使用 dig 查询 A 记录

如您所知,如果没有指定 DNS 记录类型,dig 也将请求 A 记录。 您也可以在不指定a参数的情况下查询「A 记录」。

查询 CNAME 记录

要查找「别名记录」,请使用cname参数:

dig +nocmd www.sysgeek.cn cname +noall +answer
使用 dig 查询 CNAME 记录
使用 dig 查询 CNAME 记录

查询 TXT 记录

可以使用txt参数检索特定域的所有「TXT 记录」:

dig +nocmd sysgeek.cn txt +noall +answer
使用 dig 查询 TXT 记录
使用 dig 查询 TXT 记录

查询 MX 记录

要获取特定域的所有邮件服务器列表,请使用mx参数:

dig +nocmd sysgeek.cn mx +noall +answer
使用 dig 查询 MX 记录
使用 dig 查询 MX 记录

查询 NS 记录

要查找特定域的权威名称服务器,请使用ns参数:

dig +nocmd sysgeek.cn ns +noall +answer
使用 dig 查询 NS 记录
使用 dig 查询 NS 记录

PTR 反向 DNS 查询

要查询与特定 IP 地址关联的主机名,请使用-x参数。例如,要在208.118.235.148上执行反向查询,可以执行以下命令:

dig -x 208.118.235.148 +noall +answer
使用 dig 进行反向 DNS 查询
使用 dig 进行反向 DNS 查询

从输出中可以看出,IP 地址208.118.235.148与主机名ip-208-118-235-148.twdx.net.相关联。

dig 命令批量 DNS 查询

如果要对大量域名进行 DNS 查询,可以将其全部写入到一个文本文件中(一行一个),然后使用-f参数,再跟止文件名即可,例如:

dig -f domains.txt +short

.digrc 文件

我们还可通过不同用户的${HOME}/.digrc文件来控制 dig 命令的行为,如果.digrc文件存在于用户的主目录中,则 dig 可以读取其中的参数,而无需用户在执行命令时手动添加。例如,直接在~/.digrc文件中写入+nocmd +noall +answer参数。

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #2

    很详细的dig使用介绍,感谢分享。

    signigelchan4年前 (2018-11-18)回复
  2. #1

    很好用详细的教程。感谢撰文

    絮沫纷飞4年前 (2018-10-21)回复