Linux dig命令 DNS查询
在本教程中我们将说明如何在Linux使用DNS查询工具dig。包括在Linux发行版安装dig。了解dig的输出,仅输出应答,详细的应答ANSWER信息
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
配置 dig
可以在${HOME}/.digrc
文件为每个用户设置选项来控制dig命令的行为。
如果.digrc
文件指定的选项与用户在命令行指定选项冲突,则优先使用命令行指定的选项。
例如,如果只想打印应答部分,请使用你喜欢的文本编辑器编辑文件,在本教程中我们将使用vim编辑文件~/.digrc
。
vim ~/.digrc
结论
至此您应该能够解决大多数与DNS相关的问题,如果您喜欢我们的内容,欢迎转发。