如何在Linux上使用Dig命令查询DNS

Dig(域信息收集器)是用于查询DNS服务器名称的功能强大的命令行工具。

使用dig命令,您可以查询有关各种DNS记录的信息,包括主机地址,邮件交换和名称服务器。 由于它的灵活性和易用性,它是系统管理员中最常用的解决DNS问题的工具。

在本教程中,我们将向您展示如何使用dig实用程序以及实际示例和最常见的dig选项的详细说明。

要检查dig命令是否可用于您的系统类型:

dig -v

结果应如下所示:

DiG 9.11.3-1ubuntu1.1-Ubuntu

如果您的系统上没有挖掘工具,则输出将如下所示 dig: command not found,您应该可以使用发行版的软件包管理器轻松安装。

sudo apt install dnsutils
sudo yum install bind-utils

以最简单的形式,当用于查询单个主机(域)而没有任何其他参数时,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
    

    可以使用选项删除输出的这一部分 +comments… 使用此参数时,将禁用其他一些标头部分。

  3. 默认情况下,此部分仅在较新版本的dig实用程序中显示。
    ;; 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 表示IP地址 104.18.59.123
    ;; 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. 附加部分为我们提供了有关权限部分中列出的权威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
    
  8. 这是挖掘输出的最后一部分,其中包括查询统计信息。
    ;; 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

在大多数情况下,您只希望快速响应您的请求。

要获得对您的请求的简短答复,请使用选项 +short

dig linux.org +short
104.18.59.123
104.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

默认情况下,如果未指定名称服务器,则可以使用文件中列出的服务器 /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

dig +nocmd google.com a +noall +answer
google.com.		128	IN	A	216.58.206.206

如您所知,如果未指定DNS记录类型,则dig将查询A记录。您也可以在不指定选项的情况下查询A记录 a

要查找别名的域名,请使用参数 cname

dig +nocmd mail.google.com cname +noall +answer
mail.google.com.	553482	IN	CNAME	googlemail.l.google.com.

使用参数 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

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

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.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

要查询与特定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

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

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

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

〜/ .Digrc

+nocmd +noall +answer

到目前为止,您应该对如何在Linux中使用dig命令有很好的了解,并且应该能够解决大多数与DNS相关的问题。

Sidebar