Linux 和 Unix dig 命令示例
Linux 和 Unix 中的dig命令用于 DNS 查找。dig 命令执行 DNS(域名系统)查找并显示来自 DNS 名称服务器的答案。让我们看看如何在 Linux 或 Unix 中使用 dig 命令通过终端查找主机名的 IP 地址和其他 DNS 记录。
- 执行 DNS 查找。
- 查找主机地址、IP 地址、邮件交换 (MX)、CNAME、名称服务器等。
- 验证 ISP DNS 服务器和 Internet 连接。
- 验证垃圾邮件、黑名单记录等。
Linux 和 Unix dig 命令示例
在 Linux 和 Unix 中使用 dig 命令进行DNS 查找并查询 DNS 名称服务器以获取各种资源记录。
句法
Linux 中 dig 命令的基本语法如下:
其中:
$ dig Hostname
$ dig DomaiNameHere
$ dig @DNS-server-name Hostname
$ dig @DNS-server-name IPAddress
$ dig @DNS-server-name Hostname|IPAddress type
- DNS-server-name– 询问 DNS 答案的名称服务器的名称或 IP 地址。例如,8.8.8.8 或 ns1.example.com。如果未提供 DNS 服务器名称,dig 命令将使用 /etc/resolv.conf 文件并使用其中列出的名称服务器。
- Hostname|IPAddress– 使用 DNS 服务器名称查找的资源记录的名称。
- type– 设置 dig 命令查询的类型。例如,A、MX、NS 和其他 DNS 推荐类型。
Linux 和 Unix 中 dig 命令的 DNS 记录类型列表
在使用 dig 命令之前,您应该了解 DNS 的常见资源记录类型。以下是最常见的资源记录:
类型 | 目的 | 示例 |
一个 | IPv4 IP 地址 | 192.168.1.5或者75.126.153.206 |
高级 | IPv6 IP 地址 | 2607:f0d0:1002:51::4 |
别名记录 | 规范名称记录(别名) | s0.example.org是 d2m4hyssawyie7.cloudfront.net |
墨西哥 | 电子邮件服务器主机名 | smtp.example.com或者mx1.example.com |
国家标准 | 名称 (DNS) 服务器名称 | ns1.example.com或者 ns-243.awsdns-30.com |
优先权 | 指向规范名称的指针。 主要用于实现反向 DNS 查找 |
82.236.125.74.in-addr.arpa |
面向服务架构 | 有关 DNS 区域的权威信息 | 见下文 |
TXT | 文字记录 | 见下文 |
默认情况下,dig 命令仅查找 A 记录。让我们详细查看 Linux 和 Unix dig 命令示例。
dig 命令示例
首先打开终端应用程序。接下来,让我们使用 dig 查找主机的 IP 地址www.example.com,输入:
$ dig www.example.com
Linux dig 命令示例输出:
图 01:Linux 桌面输出中的默认 dig 命令
了解 Linux 和 Unix 中的 dig 命令输出
以上是针对名为 www.example.com 的单个主机的简单 dig 查询。dig 命令显示大量信息。让我们尝试了解默认 dig 命令输出:
- 问题部分显示查询类型。默认情况下,查询针对A(Internet 地址)。在此示例中,我使用 dig 命令查找 www.example.com 的 IP 地址。
- 接下来,您会在答案部分得到查询的答案- www.example.com 的地址是 75.126.153.206。
- dig 命令的最后一部分包含有关查询的统计信息(统计部分),例如名称服务器名称、查询时间等。
如何查询不同的名称服务器,例如 ns1.example.com?
dig 命令的语法如下,用于更改名称服务器:
示例输出(注意统计部分中的 205.251.198.116):
$ dig @ns1.example.com Hostname
$ dig @ns1.example.com IPAddress
$ dig @ns1.yahoo.com yahoo.com
$ dig @clay.ns.cloudflare.com www.example.com
$ dig @ns-1652.awsdns-14.co.uk. www.example.com
; <<>> DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu <<>> @ns-1652.awsdns-14.co.uk. www.example.com ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62751 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.example.com. IN A ;; ANSWER SECTION: www.example.com. 86400 IN A 72.14.186.145 ;; AUTHORITY SECTION: example.com. 86400 IN NS ns-1287.awsdns-32.org. example.com. 86400 IN NS ns-1652.awsdns-14.co.uk. example.com. 86400 IN NS ns-475.awsdns-59.com. example.com. 86400 IN NS ns-761.awsdns-31.net. ;; Query time: 74 msec ;; SERVER: 205.251.198.116#53(205.251.198.116) ;; WHEN: Wed Apr 08 22:59:43 IST 2020 ;; MSG SIZE rcvd: 198
如何使用 dig 命令选择 DNS 查询类型?
dig 会让您设置查询类型。基本语法是:
dig Hostname|IPAddress type dig @ns-server-here Hostname|IPAddress type dig Hostname|IPAddress type dig [+options] @ns-server-here Hostname|IPAddress type
以下是使用 dig 命令进行 DNS 查找的最常见示例:
查找主机名的IP 地址(A)
键入以下命令:
示例输出:
$ dig www.example.com A
$ dig @ns-1075.awsdns-06.org www.example.com A
$ dig +short www.example.com A
75.126.153.206
查找IP地址的主机名
跑步:
$ dig 74.125.236.167
查找域名/主机名的MX (邮件交换)
让我们使用 dig 命令找出 example.com 的邮件服务器:
会话:
$ dig example.com MX
$ dig @ns-1075.awsdns-06.org example.com MX
$ dig +short example.com MX
1 aspmx.l.google.com. 10 aspmx2.googlemail.com. 10 aspmx3.googlemail.com. 5 alt1.aspmx.l.google.com. 5 alt2.aspmx.l.google.com.
查找域名的NS (名称服务器)
执行以下 dig 命令:
名称服务器详细信息输出:
$ dig example.com NS
$ dig @ns-1075.awsdns-06.org example.com NS
$ dig +short example.com NS
ns-1075.awsdns-06.org. ns-1947.awsdns-51.co.uk. ns-243.awsdns-30.com. ns-866.awsdns-44.net.
查找域名的TXT (文本注释)
运行以下命令获取 google.com 的文本 (TXT) DNS 记录
输出:
$ dig google.com TXT
$ dig +short google.com TXT
$ dig @8.8.8.8 google.com TXT
; <<>> DiG 9.8.3-P1 <<>> google.com TXT ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24961 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;google.com. IN TXT ;; ANSWER SECTION: google.com. 3590 IN TXT "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all" ;; Query time: 29 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mon Jan 13 17:41:00 2014 ;; MSG SIZE rcvd: 116
任何查询,即尝试所有查询以获取尽可能多的信息
您还可以使用 dig 命令尝试如下任何查询:
这是我看到的:
$ dig example.com ANY
$ dig +short example.com ANY
$ dig @8.8.8.8 example.com ANY
; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 example.com ANY ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54232 ;; flags: qr rd ra; QUERY: 1, ANSWER: 12, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;example.com. IN ANY ;; ANSWER SECTION: example.com. 236 IN A 75.126.153.206 example.com. 21536 IN NS ns-1075.awsdns-06.org. example.com. 21536 IN NS ns-1947.awsdns-51.co.uk. example.com. 21536 IN NS ns-243.awsdns-30.com. example.com. 21536 IN NS ns-866.awsdns-44.net. example.com. 836 IN SOA ns-1075.awsdns-06.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400 example.com. 3536 IN MX 1 aspmx.l.google.com. example.com. 3536 IN MX 10 aspmx2.googlemail.com. example.com. 3536 IN MX 10 aspmx3.googlemail.com. example.com. 3536 IN MX 5 alt1.aspmx.l.google.com. example.com. 3536 IN MX 5 alt2.aspmx.l.google.com. example.com. 21536 IN AAAA 2607:f0d0:1002:51::4 ;; Query time: 31 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mon Jan 13 17:43:28 2014 ;; MSG SIZE rcvd: 406
显示DNS 区域名称的SOA 记录
Unix dig 命令示例的语法如下:
SOA 详细信息:
$ dig example.com SOA
$ dig @8.8.8.8 example.com SOA
; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 example.com SOA ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;example.com. IN SOA ;; ANSWER SECTION: example.com. 894 IN SOA ns-1075.awsdns-06.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400 ;; Query time: 28 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mon Jan 13 17:44:29 2014 ;; MSG SIZE rcvd: 116
或者尝试:
$ dig example.com +nssearch
dig 命令输出示例:
SOA ns-1075.awsdns-06.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400 from server 205.251.196.51 in 66 ms. SOA ns-1075.awsdns-06.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400 from server 205.251.199.155 in 68 ms. SOA ns-1075.awsdns-06.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400 from server 205.251.192.243 in 79 ms. SOA ns-1075.awsdns-06.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400 from server 205.251.195.98 in 141 ms.
如何使用 dig 执行反向 DNS 查找?
要将地址映射到名称(反向查找),请将-x选项传递给 dig 命令,如下所示:
针对 75.126.153.206 映射到以下域的反向 DNS 查找:
$ dig -x ip-address-here
$ dig @ns-name-server -x ip-address-here
$ dig -x 75.126.153.206
$ dig +short -x 75.126.153.206
www.example.com.
请参阅如何在 Linux / Unix 上测试或检查反向 DNS以了解更多信息。
如何使用 dig 获得长答案或简短答案?
要获得简短答案,请将以下+short选项传递给 dig 命令:
默认情况下,dig 显示长答案。您可以传递以下附加选项来获得精细的答案:
$ dig +short query
$ dig +short example.com NS
$ dig @8.8.8.8 +short example.com NS
$ dig +multiline +noall +answer +nocmd example.com ANY
图 02:获得有关域名的长而有用的答案
批处理模式:从文件读取主机名
首先使用cat 命令创建一个包含查询数量的文本文件,每行一个:
$ cat > lookup.txt
+short yahoo.com mx
+short google.com mx
+short example.com mx
将-f lookup.txt选项传递给 dig 命令,使 dig 以批处理模式运行。例如:
$ dig -f /path/to/lookup.txt
$ dig -f lookup.txt
图 03:使用 Unix dig 命令示例进行批量 DNS 查找
dig 命令调试技巧:跟踪 DNS 路径
您可以强制 Unix dig 命令遵循从根名称服务器查找名称的委托路径。语法为:
$ dig +trace example.com
$ dig +short +trace example.com
$ dig +short +trace s0.example.org
图 4:从根名称服务器追踪委托路径
使用 dig 查找 DNS 记录的 TTL(生存时间)值
生存时间 (TTL) 是一种限制域名系统 (DNS) 中 DNS 记录生存期的机制。它由权威 DNS 服务器为特定资源记录设置。TTL 以秒为单位设置,缓存(递归)DNS 服务器使用它来加快 DNS 名称解析速度。查找 TTL 的语法如下:
$ dig +nocmd +noall +answer +ttlid a example.com
$ dig +nocmd +noall +answer +ttlid A www.example.com
使用 dig 命令时设置 IPv4 或 IPv6 查询传输模式
传递-4选项强制 dig 仅使用 IPv4 查询传输:
传递选项强制 dig 仅使用 IPv6 查询传输:
$ dig -4 query ...
-6
$ dig -6 query ..
如何为 dig 指定 dns 查询的端口号
默认情况下,dig 命令使用默认端口 TCP 或 UDP 53 发送查询。我们可以按如下方式在非标准端口号(如 5053)上发送查询:
默认行为是使用 UDP 端口 #53。我们可以使用该标志来控制 TCP 或 UDP 协议。请注意,所有 AXFR 查询始终使用 TCP:
$ dig -p {PORT} query
$ dig -p 53 @1.1.1.1 www.example.com
$ dig -p 5053 www.example.com @127.0.0.1
$ dig +short -p 5053 example.com @127.0.0.1
+[no]tcp
$ dig +tcp query @ns1
$ dig +tcp www.example.com @8.8.8.8
$ dig +tcp www.example.com @fay.ns.cloudflare.com
dig 命令选项
以下是 Linux 或类 Unix 操作系统上 dig 命令的所有重要选项的摘要:
命令行选项 | 用法 |
-x dot-notation | 反向查找的快捷方式 |
-i | 使用 IP6.INT 进行 IPv6 反向查找 |
-f filename | 批处理模式 |
-b address[#port] | 绑定到源地址/端口 |
-p port | 指定端口号 |
-q name | 指定查询名称 |
-t type | 指定查询类型 |
-c class | 指定查询类 |
-k keyfile | 指定 tsig 密钥文件 |
-y [hmac:]name:key | 指定命名的 base64 tsig 密钥 |
-4 | 仅使用 IPv4 查询传输 |
-6 | 仅使用 IPv6 查询传输 |
-m | 启用内存使用调试 |
Linux dig 命令查询选项
dig 命令有许多查询选项。每个查询选项都由一个前面带有加号 ( +) 的关键字标识。一些关键字设置或重置选项。这些关键字前面可能带有字符串no以否定该关键字的含义。其他关键字为选项分配值,例如超时间隔。它们的形式为+keyword=value。查询选项包括:
选项 | 用法 |
+[no]vc | TCP 模式 |
+[no]tcp | TCP 模式,替代语法 |
+time=### | 设置查询超时 [5] |
+tries=### | 设置 UDP 尝试次数 [3] |
+retry=### | 设置 UDP 重试次数 [2] |
+domain=### | 设置默认域名 |
+bufsize=### | 设置 EDNS0 最大 UDP 数据包大小 |
+ndots=### | 设置 NDOTS 值 |
+edns=### | 设置 EDNS 版本 |
+[no]search | 设置是否使用搜索列表 |
+[no]showsearch | 使用中间结果进行搜索 |
+[no]defname | 同上 |
+[no]recurse | 递归模式 |
+[no]ignore | 不要将 TC 响应恢复为 TCP。 |
+[no]fail | 不要在 SERVFAIL 上尝试下一个服务器 |
+[no]besteffort | 尝试解析非法信息 |
+[no]aaonly | 在查询中设置 AA 标志 +[no]aaflag |
+[no]adflag | 在查询中设置 AD 标志 |
+[no]cdflag | 在查询中设置 CD 标志 |
+[no]cl | 控制记录中的类别显示 |
+[no]cmd | 控制命令行的显示 |
+[no]comments | 控制注释行的显示 |
+[no]question | 控制问题的显示 |
+[no]answer | 控制答案的显示 |
+[no]authority | 控制权限显示 |
+[no]additional | 控制显示附加 |
+[no]stats | 控制统计数据的显示 |
+[no]short | 禁用除简短答案之外的所有内容 |
+[no]ttlid | 控制记录中 ttls 的显示 |
+[no]all | 设置或清除所有显示标志 |
+[no]qr | 发送前打印问题 |
+[no]nssearch | 搜索所有权威域名服务器 |
+[no]identify | 在简短回答中识别响应者 |
+[no]trace | 从根向下追踪委派 |
+[no]dnssec | 请求 DNSSEC 记录 |
+[no]nsid | 请求名称服务器 ID |
+[no]multiline | 以扩展格式打印记录 |
+[no]onesoa | AXFR 仅打印一条 soa 记录 |
相关媒体
本教程还提供简短视频格式:
参见
结论
我们看到了许多 Linux 和 Unix dig 命令示例。有关更多信息,请参阅此处的bind 文档。您可以使用 man 命令/help 命令或 help 命令阅读手册页,如下所示:
$ man dig
$ dig -h