Dig全称Domain Information Groper。是一个功能强大的命令行工具,用于查询DNS域名服务器。

使用dig命令,您可以查询各种DNS记录的信息,包括主机地址,邮件交换和域名服务器。

它是系统管理员中用于排除DNS问题的最常用工具,它具很高的灵活性和易用性。

在本教程中我们将说明如何在Linux使用dig命令查询DNS。包括在Linux发行版安装dig。了解dig的输出,仅输出应答,详细的应答ANSWER信息。

指定域名服务器查询,了解DNS的记录类型,查询CNAME记录,查询TXT记录,批量查询,反向DNS查找,查询所有记录,查询NS记录,查询MX记录,配置dig。

安装 dig命令

你可以运行命令dig -v检查dig版本来验证您的系统是否已安装dig。如果你的系统已经安装dig命令,dig -v命令将会打印版本号DiG 9.11.3-1ubuntu1.1-Ubuntu

如果您的Linux系统还有没有安装dig命令,dig -v命令将会打印dig: command not found,则可以使用发行版的软件包管理器来安装它。

如果你的计算机运行的是基于Debian的Linux发行版,比如Ubuntu,Linux mint。请运行命令sudo apt install dnsutils安装dig。

如果你的计算机运行的是基于RedHat的Linux发行版,比如CentOS,Fedora等发行版,请运行命令sudo yum install bind-utils安装dig。

如果你是Arch用户可以运行命令sudo pacman -S bind-tools安装dig。

sudo apt install dnsutils

sudo yum install bind-utils

sudo pacman -S bind-tools

了解dig输出

使用dig命令的最简单的方式,不指定任何选项运行dig命令。dig命令打印非常详细的输出。例如命令dig linux.org将会查询linux.org域的信息。

dig linux.org
; <<>> DiG 9.10.3-P4-Ubuntu <<>> linux.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57452
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

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

;; ANSWER SECTION:
linux.org.		300	IN	A	104.27.167.219
linux.org.		300	IN	A	104.27.166.219

;; Query time: 256 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jul 19 11:12:41 CST 2019
;; MSG SIZE  rcvd: 59

输出的第一行打印已安装的dig版本号以及运行的DNS查询。第二行显示全局选项,默认是cmd。

如果您不希望第二行包含在输出中,可以使用+nocmd选项。此选项必须是dig命令后的第一个参数。

Got Answer应答包括从请求授权后来自DNS服务器应答的详细信息。此部分的第一行是标题,包括操作码(由dig执行的操作)和操作的状态。

状态NOERROR意味着所请求的都已授权查询并且没有任何问题。可以使用+nocomments选项删除应答的输出。

OPT PSEUDOSECTION此部分仅在较新dig版本显示。您可以在此处阅读DNS扩展机制EDNS的更多信息。如果您不希望此部分包含在输出中,请使用+noedns选项。

QUESTION显示dig命令要查询的记录类型。默认是A记录,您可以使用+noquestion选项禁用此部分的输出。

ANSWER章节为我们提供了一个应答。正如我们提到的,默认情况下dig会请求A记录。这里域linux.org指向IP地址104.18.59.123

如果你想关闭ANSWER输出,可以使用+noanswer选项从输出中删除此部分。

AUTHORITY SECTION告诉我们哪些服务器是应答有询域的DNS的AUTHORITY。您可以使用+noauthority选项禁用输出的此部分。

ADDITIONAL SECTION为我们提供了有关AUTHORITY DNS服务器的IP地址的信息。

Query time这是dig输出的最后一部分,其中包含查询的统计信息。您可以使用+nostats选项禁用此信息。

仅输出应答ANSWER

在大多数情况下,您只想快速查询ANSWER SECTION,要获得查询的简短应答ANSWER。

请使用dig命令的+short选项,例如命令dig linux.org +short仅打印A记录的IP地址。

104.18.59.123
104.18.58.123

详细的应答ANSWER

想要更详细的ANSWER应答信息,请使用dig命令的+noall选项关闭所有结果,然后仅使用+answer选项,展开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

指定域名服务器查询

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

要指定查询的DNS服务器,请使用@符号,后跟域名服务器IP地址或主机名运行dig命令。

例如命令dig linux.org @8.8.8.8使用Google DNS服务器8.8.8.8查询linux.org域名信息。

dig linux.org @8.8.8.8

DNS 记录类型

Dig命令允许您通过将记录类型附加到查询末尾来运行指定DNS记录类型的查询。在下一节中,我们将向您展示如何搜索最常见的记录。

例如A记录(IP地址),CNAME(别名),TXT(文本记录),MX记录(邮件交换)和NS(域名服务器记录)。

查询A记录

获取域名的所有A记录地址,请使用dig命令的a选项。如果未指定DNS记录类型,dig将请求A记录。

您也可以在不指定a选项查询A记录,运行命令dig +nocmd google.com a +noall +answer

dig +nocmd google.com a +noall +answer
google.com.		300	IN	A	172.217.27.46

查询CNAME别名记录

要查找指定域名的别名记录,请使用dig命令的cname选项。

命令dig +nocmd mail.google.com cname +noall +answer将会查询mail.google.com的别名记录。

dig +nocmd mail.google.com cname +noall +answer

查询TXT记录

使用dig命令的txt选项可检索指定域名的所有TXT记录。

dig +nocmd google.com txt +noall +answer

查询MX记录

获取指定域名所有邮件服务器列表,请使用dig命令的mx选项。

dig +nocmd google.com mx +noall +answer

查询NS记录

要查找指定域的名称服务器,请使用dig命令的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

反向DNS查找

要查询与指定IP地址关联的主机名或者域名,可以使用dig命令的-x选项,执行反向DNS解释。

例如命令dig -x 208.118.235.148 +noall +answer执行反向DNS解释,查找ip地址208.118.235.148的域名。

从输出中可以看到IP地址208.118.235.148与主机名wildebeest.gnu.org相关联。

dig -x 208.118.235.148 +noall +answer
; <<>> 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.

批量查询

如果要使用dig命令查询大量的域名,可以将它们添加到文件中,每行一个域名,然后使用dig的-f选项指定文件名。

例如命令dig -f domains.txt +short查询domains.txt文件的所有域名。

dig -f domains.txt +short
google.com
myfreax.com
linux.org
domains.txt

配置 dig

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

如果.digrc文件指定的选项与用户在命令行指定选项冲突,则优先使用命令行指定的选项。

例如,如果只想打印应答部分,请使用你喜欢的文本编辑器编辑文件,在本教程中我们将使用vim编辑文件~/.digrc

vim ~/.digrc
+nocmd +noall +answer
~/.digrc

结论

至此您应该能够解决大多数与DNS相关的问题,如果您喜欢我们的内容,欢迎转发。