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 可以使用发行版的软件包管理器来安装该工具。

安装 dig 在Ubuntu和Debian上

sudo apt update && sudo apt install dnsutils

安装 dig 在CentOS和Fedora上

sudo yum install bind-utils

安装 dig 在Arch Linux上

sudo pacman -S bind-tools

了解 dig 输出编号

以最简单的形式,当用于查询单个主机(域)而没有任何其他选项时, dig 命令非常冗长。

在以下示例中,我们在 linux.org 域:

dig linux.org

输出应如下所示:

让我们逐节讲解并解释 dig 命令:

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

    ; <<>> DiG 9.13.3 <<>> linux.org
    ;; global options: +cmd

    如果您不希望这些行包含在输出中,请使用 +nocmd 选项。 此选项必须是第一个之后的选项 dig 命令。

  2. 下一部分包括有关从请求的授权机构(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 选项,它还会禁用其他部分的标题。

  3. “ OPT”伪部分仅在较新版本的 dig 效用。 您可以在此处阅读有关DNS扩展机制(EDNS)的更多信息。

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

    要从输出中排除此部分,请使用 +noedns 选项。

  4. 在“问题”部分 dig 显示查询(问题)。 默认, dig 请求A记录。

    ;; QUESTION SECTION:
    ;linux.org.			IN	A

    您可以使用 +noquestion 选项。

  5. “答案”部分为我们提供了问题的答案。 正如我们已经提到的,默认情况下 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 选项。

  6. “权限”部分告诉我们哪些服务器是用于回答有关查询域的DNS查询的权限。

    ;; AUTHORITY SECTION:
    linux.org.		86379	IN	NS	lia.ns.cloudflare.com.
    linux.org.		86379	IN	NS	mark.ns.cloudflare.com.

    您可以使用以下命令禁用输出的此部分 +noauthority 选项。

  7. “ 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 选项禁用答复的其他部分。

  8. 最后一部分 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地址或主机名。

例如,要查询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(名称服务器)。

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 文件。

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文件#

dig 可以通过在 ${HOME}/.digrc 文件。

如果 .digrc 该文件位于用户的主目录中,其中指定的选项在命令行参数之前应用。

例如,如果您只想显示答案部分,请打开文本编辑器并创建以下内容 ~/.digrc 文件:

〜/ .digrc

+nocmd +noall +answer

结论#

dig 是用于查询DNS信息并对DNS相关问题进行故障排除的命令行工具。

如果您有任何疑问或反馈,请随时发表评论。

挖掘终端

Sidebar