dig
(域信息搜索器)命令是一个用于询问 DNS
域名服务器的灵活的工具。它执行 DNS
查询,显示从已查询名称服务器返回的应答。多数 DNS
管理员使用 dig
命令 来诊断 DNS
问题,因为它灵活性好、容易使用、输出清晰。虽然通常情况下 dig
与命令行参数配合使用,但它也可以按批处理方式从文件读取查询请求。不同于早期版本,dig
的 BIND9 实现允许从命令行发出多个查询。除非被告知查询特定名称服务器,否则 dig
命令将尝试查询 /etc/resolv.conf
文件中列示的每个服务器。如果未指定任何命令行参数或选项,那么 dig
命令会对“.
”(根目录)执行 NS
查询。
可通过 ${HOME}/.digrc
文件对 dig
命令设置每个用户的缺省值。dig
命令会读取此文件并在应用命令行参数之前应用其中的所有选项。
IN
和 CH
类名与 IN
和 CH
顶级域名重叠。查询这些顶级域时,可使用 -t
和 -c
选项来指定类型和类,或使用 -q
选项来指定域名,或者使用 IN
和 CH
名称。
语法
dig [@global-server] [domain] [q-type] [q-class] {q-opt} {global-d-opt} host [@local-server] {local-d-opt} [ host [@local-server] {local-d-opt} [...]]
安装
yum install bind-utils
标志
-b address
设置要将查询发送至的地址的源 IP 地址。 这必须是其中一个主机网络接口上的有效地址,或者是“0.0.0.0”或“::”。可通过附加“#port”来指定可选端口。
-c class
覆盖缺省查询类(对于因特网为 IN)。class 参数值是任何有效类,如 HS(用于 Hesiod 记录)或 CH(用于 CHAOSNET 记录)。
-f filename
通过从指定文件名读取要处理的查询请求列表,使 dig 命令在批处理方式下运行。文件包含许多查询;每行一个。对于使用命令行接口的 dig 命令,该文件中的每个条目必须以表示为查询的方式进行组织。
-h
显示命令行参数和选项的简短总结。
-k filename
使用 -k 选项来指定 TSIG 密钥文件以对由 dig 命令发送的 DNS 查询签名。
-p port#
查询非标准端口号。port# 参数值是 dig 命令将其查询发送至的端口号而不是标准 DNS 端口号 53。可使用此选项来测试已配置为侦听非标准端口号上的查询的名称服务器。
-q name
将该名称与其他参数区分开。将查询名称设置为指定的 name 参数值。
-t type
将查询类型设置为 type 参数值。它可以是 BIND9 中支持的任意有效查询类型。缺省查询类型是 A,除非提供 -x 选项来指示一个逆向查询。通过指定 AXFR 的 type 可以请求一个区域传输。需要增量区域传输 (IXFR) 时,type 参数值设置为 ixfr=N。增量区域传输将包含对区域所做的更改,因为区域的 SOA 记录中的序列号为 N。
-x addr
简化冗余查询(将地址映射至名称)。addr 参数值是用点分十进制表示的 IPv4 地址或用冒号定界的 IPv6 地址。使用此选项时,无需提供 name、class 和 type 参数。dig 命令自动对 11.12.13.10.in-addr.arpa 之类的名称执行查询,并分别将查询类型和类设置为 PTR 和 IN。
-y [hmac:] name:key
在命令行上指定 TSIG 密钥本身;hmac 是 TSIG 的类型。缺省值为 HMAC-MD5。name 参数值是 TSIG 密钥的名称,而 key 参数值是实际密钥。密钥是 64 位加密字符串,通常由 dnssec-keygen(8) 生成。在多用户系统上使用 -y 选项时必须特别谨慎,因为密钥在 ps(1) 的输出或 shell 的历史记录文件中是可视的。将 TSIG 认证与 dig 命令配合使用时,查询的名称服务器需要知道正在使用的密钥和算法。在 BIND 中,这是通过在 named.conf 文件中提供适当的密钥和服务器语句完成的。
-4
强制 dig 命令仅使用 IPv4 查询传输。
-6
强制 dig 命令仅使用 IPv6 查询传输。
查询选项
dig
命令提供若干查询选项,它们会影响查询的执行方式和显示的结果。一些在查询请求报头设置或复位标志位,一部分决定显示哪些回复信息,其他的确定超时和重试战略。每个查询选项被带前缀 (+)
的关键字标识。一些关键字设置或复位一个选项。可在前面加上字符串 no 以否定该关键字的含义。其他关键字分配各选项的值,例如超时时间间隔。它们的格式形如 +keyword=value
。
查询选项是:
+[no]tcp
查询名称服务器时使用或不使用 TCP。缺省行为是使用 UDP,除非是 AXFR 或 IXFR 请求,才使用 TCP 连接。
+[no]vc
查询名称服务器时使用或不使用 TCP。+[no]tcp 的备用语法提供了向下兼容。vc 代表虚电路。
+[no]ignore
忽略 UDP 响应的中断,而不是用 TCP 重试。缺省情况运行 TCP 重试。
+domain=somename
设置包含单个域 somename 的搜索列表(就好像在 /etc/resolv.conf 文件中的域伪指令指定的那样),并启用搜索列表处理(就好像给定了 +search 选项那样)。
+[no]search
使用或不使用 /etc/resolv.conf 文件(如果存在)中的搜索列表或域伪指令定义的搜索列表。缺省情况不使用搜索列表。
+[no]defname
不推荐使用,视作 +[no]search 的同义词。
+[no]aaonly
在查询中设置“aa”标志。
+[no]adflag
在查询中设置或不设置 AD(真实数据)位。目前 AD 位只在响应中有标准含义,而查询中没有,但是出于完整性考虑在查询中这种性能可以设置。
+[no]cdflag
在查询中设置或不设置 CD(禁用检查)位。它请求服务器不对响应执行 DNSSEC 验证。
+[no]cl
显示记录时显示或不显示 CLASS。
+[no]ttlid
显示记录时显示或不显示 TTL。
+[no]recursive
切换查询中的 RD(要求递归)位设置。缺省情况下会设置此位,它表示 dig 通常会发送递归查询。当使用 查询选项 +nssearch 或 +trace 时,递归自动禁用。
+[no]nssearch
设置此选项时,dig 命令会尝试查找区域(该区域包含要查询的名称)的权威域名服务器,并显示每个域名服务器对应该区域的 SOA 记录。
+[no]trace
切换为待查询名称从根名称服务器开始的代理路径跟踪。缺省情况不使用跟踪。启用跟踪时,dig 命令会执行迭代查询以解析要查询的名称。它会遵循根服务器中的引用,显示来自用于解析查询的每个服务器的应答。
+[no]cmd
切换输出中的初始注释的显示,该注释标识 dig 的版本和已应用的查询选项。缺省情况下会显示此注释。
+[no]short
提供简要应答。缺省情况是以详细格式显示应答信息。
+[no]identify
启用 +short 选项时,显示或不显示提供应答的 IP 地址和端口号。如果请求简短格式应答,缺省情况不显示提供应答的服务器的源地址和端口号。
+[no]comments
切换输出中的注释行显示。缺省情况下会显示注释。
+[no]stats
切换统计信息的显示:执行查询的时间、应答的大小等等。缺省显示查询统计信息。
+[no]qr
发送查询时显示或不显示查询。缺省情况下不显示该查询。
+[no]question
返回答应时,显示或不显示查询的问题部分。缺省作为注释显示问题部分。
+[no]answer
显示或不显示应答的回答部分。缺省情况下会显示此项。
+[no]authority
显示或不显示应答的权限部分。缺省情况下会显示此项。
+[no]additional
显示或不显示应答的附加部分。缺省情况下会显示此项。
+[no]all
设置或清除所有显示标志。
+time=T
将查询的超时设置为 T 秒。缺省超时值为 5 秒。尝试将 T 参数值设置为小于 1 会导致应用设置为 1 秒的查询超时。
+tries=A
将尝试针对服务器执行的 UDP 查询的次数设置为 A 参数值而不是缺省值 3。如果 A 参数值小于或等于 0,那么重试次数以静默方式舍入为 1。
+retry=T
将重试针对服务器执行的 UDP 查询的次数设置为 T 参数值而不是缺省值 2。与 +tries 不同,这不包括初始查询。
+ndots=D
将必须出现在名称中的点的数目设置为 D 参数值,因为它被视为绝对参数。缺省值为在 /etc/resolv.conf 文件中使用 ndots 语句定义的值,如果没有 ndots 语句,那么缺省值为 1。点的数目较少的名称被解释为相对名称,并且会在 /etc/resolv.conf 文件的搜索或域伪指令中列示的域中搜索这些名称。
+bufsize=B
设置使用 EDNS0 的 UDP 消息缓冲区大小为 B 字节。此缓冲区的最大大小和最小大小分别为 65535 和 0。超出此范围的值会相应地向上或向下舍入。非零值会导致发送 EDNS 查询。
+edns=#
指定要用于查询的 EDNS 版本。有效值为 0 到 255。设置 EDNS 版本会导致发送 EDNS 查询。+noedns 会清除建议的 EDNS 版本。
+[no]multiline
以详细的多行格式显示类似 SOA 的记录,并附带可读注释。缺省值为在单行上显示一条记录,以便机器解析 dig 输出。
+[no]fail
接收到 SERVFAIL 时不要尝试下一个服务器。缺省情况是不尝试下一个服务器,这与正常的存根解析器行为相反。
+[no]besteffort
尝试显示格式错误的消息的内容。缺省情况是不显示格式不正确的应答。
+[no]dnssec
通过在查询的附加部分的 OPT 记录中设置 DNSSEC OK 位 (DO) 来请求要发送的 DNSSEC 记录。
+[no]sigchase
跟踪 DNSSEC 签名链。要求使用 -DDIG SIGCHASE 来编译 dig 命令。
+trusted-key=####
指定包含要与 +sigchase 一起使用的可信密钥的文件。每个 DNSKEY 记录必须为单独的一行。如果未指定,那么 dig 命令会查找 /etc/trusted-key.key 文件,然后会在当前目录中查找 trusted-key.key 文件。要求使用 -DDIG SIGCHASE 来编译 dig 命令。
+[no]topdown
跟踪 DNSSEC 签名链时,执行自顶向下验证。要求使用 -DDIG SIGCHASE 来编译 dig 命令。
应用实例:
1. dig baidu.com
即可输出baidu.com这个域名的ip地址,所在的域名服务器以及域名服务器的地址,如下:
; <<>> DiG 9.9.5-3ubuntu0.6-Ubuntu <<>> baidu.com dig这个程序的版本号和要查询的域名 ;; global options: +cmd 表示可以在命令后面加选项 ;; Got answer: 以下是获取信息的内容 ;; ->>HEADER<
从以上dig结果中熟悉了2种DNS记录,A记录和NS记录.了解了dig的收到消息的各部分意义之后,接下来就可以看看dig命令的一些其他用法.
2. dig baidu.com
这个默认就是查询A记录,由以上可知,还有NS记录
3. dig baidu.com ns
这个是只查询NS记录,输出和dig baidu.com几乎一样,除了没有baidu.com的A记录.
4. dig baidu.com soa
查询SOA记录,SOA资源记录表明,此DNS服务器是为该DNS域中的数据的信息的最佳来源,这个命令的输出,比dig baidu.com ns命令多出一行,表示最佳的DNS域名服务器:
;; ANSWER SECTION: baidu.com. 7200 IN SOA dns.baidu.com. sa.baidu.com. 2012128552 300 300 2592000 7200 各项意义如下: 1、SOA SOA记录 2、dns.baidu.com. Nameserver,该域名解析使用的服务器 3、dns.baidu.com Email address,该域名管理者的电子邮件地址,第一个'.'代表电子邮件中的'@', 所以对应的邮件地址为:[email protected] 4、2012128552 Serial number,反映域名信息变化的序列号。每次域名信息变化该项数值需要增大。 格式没有要求,但一般习惯使用YYYYMMDDnn的格式,表示在某年(YYYY)、月(MM)、日(DD)进行了第几 次(nn)修改。 5、300 Refresh,备用DNS服务器隔一定时间会查询主DNS服务器中的序列号是否增加,即域文件是否有 变化。这项内容就代表这个间隔的时间,单位为秒。 6、300 Retry,这项内容表示如果备用服务器无法连上主服务器,过多久再重试,单位为秒。通常小于 刷新时间。 7、2592000 Expiry,当备用DNS服务器无法联系上主DNS服务器时,备用DNS服务器可以在多长时间内 认为其缓存是有效的,并供用户查询。单位为秒。1209600秒为2周。 8、7200 Minimum,缓存DNS服务器可以缓存记录多长时间,单位为秒。这个时间比较重要,太短会增加主 DNS服务器负载。如果太长,在域名信息改变时,需要更长的时间才能各地的缓存DNS服务器才能得到变化 信息。
5. dig baidu.com mx
查询mx记录,表示发送到此域名的邮件将被解析到的服务器IP地址.
6. dig baidu.com +trace
这个很有用,可以看到dig程序是怎么一步一步的解析出域名的IP地址.原理就是DNS递归查询.先从本地域名服务器获取所有的"."根域名服务器,然后从某个根域名服务器获取所有一级域名com服务器,接着从某个一级域名com服务器获取所有的二级域名baidu.com的所有域名服务器,最后从某个二级域名baidu.com服务器获取所有的记录.就是A记录和NS记录.