Linux 中的 Dig 命令(DNS 查找)

评论 0 浏览 0 2018-10-13

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 command output

让我们一节一节地去解释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. 在 "QUESTION "部分,dig显示查询(问题)。默认情况下,dig要求提供A记录。

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

    你可以使用+noquestion选项禁用这部分内容。

  5. "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选项从输出中删除这部分内容。

  6. AUTHORITY "部分告诉我们,哪些服务器回应了有关被查询域的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地址或主机名。

例如,要查询谷歌名称服务器(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文件

可以通过在${HOME}/.digrc文件中设置每个用户的选项来控制dig命令的行为。

如果.digrc文件存在于用户的主目录中,它所指定的选项将在命令行参数之前被应用。

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

~/.digrc
+nocmd +noall +answer

总结

dig是一个命令行工具,用于查询DNS信息和排除DNS相关问题的故障。

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-11-11
0 个评论
标签