dig命令是查询DNS域名服务器的灵活工具,它执行DNS查找并显示从查询的域名服务器返回的解析。大多数DNS管理员使用dig来解决DNS请求,因为它灵活、易用且输出清晰,其他查找工具的功能往往不如dig。
尽管dig通常与命令行参数一起使用,但它也具有从文件中读取查找请求的批处理操作模式。当给出-h选项时,将打印其命令行参数和选项的简要摘要。与早期版本不同,dig的BIND9实现允许从命令行发出多个查找。
命令格式
dig [@server] [-b address] [-c class] [-f filename] [-k filename] [-m] [-p port#] [-q name] [-t type] [-v] [-x addr] [-y [hmac:]name:key] [[-4] | [-6]] [name] [type] [class] [queryopt...]
dig [-h]
dig [global-queryopt...] [query...]
除非被告知要查询特定的域名服务器,否则dig将尝试/etc/resolv.conf中列出的每个服务器。如果找不到可用的服务器地址,dig将向本地主机发送查询。
当没有给出命令行参数或选项时,dig将对“.”(根)执行NS查询。
可以通过${HOME}/.digrc为dig设置每个用户的默认值。读取此文件,并在命令行参数之前应用其中的任何选项。对于需要可预测行为的脚本,-r选项将禁用此功能。
IN和CH类域名与IN和CH顶级域名重叠。使用-t和-c选项指定类型和类,使用-q指定域名,或者在查找这些顶级域时使用“IN.”和“CH.”。
简单用法
dig的典型调用如下:
dig @server name type
其中:
server
是要查询的域名服务器的域名或IP地址。这可以是以点分十进制表示的IPv4地址,也可以是以冒号分隔的IPv6地址。当提供的服务器参数是主机名时,dig在查询该域名服务器之前解析该域名。
如果没有提供服务器参数,则dig将查阅/etc/resolv.conf;如果在那里找到一个地址,它会查询该地址的域名服务器。如果使用了-4或-6选项中的任何一个,则只会尝试相应传输的地址。如果没有找到可用的地址,dig将向本地主机发送查询,将显示来自域名服务器的响应。
name
是要查找的资源记录的域名。
type
指示需要什么类型的查询:ANY、A、MX、SIG等类型,可以是任何有效的查询类型。如果没有提供类型参数,dig将对a记录执行查找。
选项
-4
仅使用IPv4。
-6
仅使用IPv6。
-b address[#port]
设置查询的源IP地址。地址必须是主机网络接口上的有效地址,或“0.0.0.0”或“::”,可以通过附加“#<port>”来指定可选端口。
-c class
设置查询类。默认类别为IN;其他类是用于Hesiod记录的HS或用于Chaosnet记录的CH。
-f file
批处理模式:dig从给定文件中读取要处理的查找请求列表。文件中的每一行都应该以与使用命令行界面显示为要dig的查询相同的方式进行组织。
-i
使用过时的RFC 1886 IP6.INT域执行反向IPv6查找,该域已不再使用。不尝试过时的位串标签查询(RFC 2874)。
-k keyfile
使用从给定文件中读取的密钥,使用TSIG对查询进行签名。密钥文件可以使用tsig-keygen生成。当使用带dig的TSIG身份验证时,被查询的域名服务器需要知道正在使用的密钥和算法。在BIND中,这是通过在named.conf中提供适当的密钥和服务器语句来实现的。
-m
启用内存使用调试,会打印海量输出。
-p port
将查询发送到服务器上的非标准端口,而不是默认端口53。此选项将用于测试已配置为侦听非标准端口号上的查询的域名服务器。
-q name
要查询的域名,这有助于将域名与其他参数区分开来。
-r
不要从${HOME}/.digrc中读取选项,这对于需要可预测行为的脚本很有用。
-t type
要查询的资源记录类型。它可以是任何有效的查询类型。如果它是BIND 9中支持的资源记录类型,则可以通过类型助记符(如“NS”或“AAAA”)给出。默认查询类型为“A”,除非提供了-x选项以指示反向查找。可以通过指定AXFR的类型来请求区域传输。当需要增量区域传输(IXFR)时,将类型设置为IXFR=N。增量区域传输将包含自区域SOA记录中的序列号为N以来对该区域所做的更改。
所有资源记录类型都可以表示为“TYPEnn”,其中“nn”是类型的编号。如果BIND 9中不支持资源记录类型,则将显示如RFC 3597中所述的结果。
-u
以微秒而不是毫秒为单位打印查询时间。
-v
打印版本号并退出。
-x addr
简化了反向查找,用于将地址映射到域名。addr是一个以十进制点表示的IPv4地址,或者是一个由冒号分隔的IPv6地址。使用-x时,不需要提供域名、类和类型参数。dig会自动查找94.2.0.192.in-addr.arpa这样的域名,并将查询类型和类分别设置为PTR和in。IPv6地址是在IP6.ARPA域下使用半字节格式查找的(但也请参阅-i选项)。
-y [hmac:]keyname:secret
使用具有给定身份验证密钥的TSIG对查询进行签名。keyname是密钥的域名,secret是base64编码的共享密钥。hmac是关键算法的域名;有效的选择是hmac-md5、hmac-sha1、hmac-sha224、hmacs-ha256、hmac-siha384或hmac-sha512。如果未指定hmac,则默认值为hmac-md5,或者如果禁用了md5,则为hmac-sha256。
注意:应该使用-k选项,避免使用-y选项,因为使用-y时,共享机密将以明文形式作为命令行参数提供。这可能在ps的输出中或用户外壳维护的历史文件中可见。
查询选项
dig提供了许多查询选项,这些选项会影响进行查找和显示结果的方式。其中一些设置或重置查询头中的标志位,一些确定打印解析的哪些部分,另一些确定超时和重试策略。
每个查询选项都由一个前缀为加号(+)的关键字标识。某些关键字设置或重置选项。它们前面可以加上字符串no以否定该关键字的含义。其他关键字为超时间隔等选项指定值。它们的形式为+关键字=值(+keyword=value)。关键词可以缩写,前提是缩写不会导致歧义;例如,+cd相当于+cdflag。查询选项包括:
+[no]aaflag
+[no]aaonly的同义词。
+[no]aaonly
在查询中设置“aa”标志。
+[no]additional
显示[do not display]答复的附加部分。默认情况是显示它。
+[no]adflag
在查询中设置[do not display]AD(authentic dat,真实数据)位。这请求服务器返回是否所有的解析和权限部分都已根据服务器的安全策略验证为安全的。AD=1表示所有记录都已验证为安全记录,并且解析不在OPT-OUT范围内。AD=0表示解析的某些部分不安全或未验证。此位是默认设置的。
+[no]all
设置或清除所有显示标志。
+[no]answer
显示[do not display]答复的回答部分。默认情况是显示它。
+[no]authority
显示[do not display]答复的权限部分。默认情况是显示它。
+[no]badcookie
如果收到BADCOOKIE响应,请使用新的服务器cookie重试查找。
+[no]besteffort
尝试显示格式错误的消息的内容。默认情况是不显示格式错误的解析。
+bufsize=B
将使用EDNS0通告的UDP消息缓冲区大小设置为B字节。该缓冲区的最大和最小大小分别为65535和0。超出此范围的值将适当地向上或向下取整。零以外的值将导致发送EDNS查询。
+[no]cdflag
在查询中设置[do not display]CD(checking disable,检查已禁用)位。这会请求服务器不对响应执行DNSSEC验证。
+[no]class
打印记录时显示[do not display]CLASS。
+[no]cmd
切换输出中初始注释的打印,标识已应用的dig版本和查询选项。这一选择总是具有全局的影响;它不能全局设置,然后在每次查找的基础上重写。默认情况是打印此注释。
切换输出中某些注释行的显示,这些注释行包含有关数据包报文头和OPT伪节的信息以及响应节的域名。默认情况是打印这些注释。
+[no]comments
输出中其他类型的注释不受此选项的影响,但可以使用其他命令行开关进行控制。其中包括+[no]cmd、+[no]question、+[no]stats和+[no]rrcomments。
+[no]cookie[=####]
发送一个带有可选值的COOKIE EDNS选项。根据先前的响应回复COOKIE将允许服务器识别先前的客户端。默认值为+cookie。
+当+trace被设置为更好地模拟来自域名服务器的默认查询时,cookie也被设置。
+[no]crypto
切换DNSSEC记录中加密字段的显示。这些字段的内容对于调试大多数DNSSEC验证失败是不必要的,删除它们可以更容易地看到常见的失败。默认情况是显示字段。当省略时,它们被字符串“[deleted]”替换,或者在DNSKEY的情况下,密钥id显示为替换,例如“[key id=value]”。
+[no]defname
已弃用,视为+[no]search的同义词。
+[no]dnssec
通过在查询的附加部分的OPT记录中设置DNSSEC OK位(DO),请求发送DNSSEC记录。
+domain=somename
将搜索列表设置为包含单个域somename,就像在/etc/resolv.conf中的域指令中指定的那样,并启用搜索列表处理,就像给定了+search选项一样。
+dscp=value
设置发送查询时要使用的DSCP代码点。有效的DSCP代码点在[0..63]范围内。默认情况下,未显式设置任何代码点。
+[no]edns[=#]
指定要查询的EDNS版本。有效值为0到255。设置EDNS版本将导致发送EDNS查询+noedns清除记住的EDNS版本。默认情况下,EDNS设置为0。
+[no]ednsflags[=#]
将必须为零的EDNS标志位(Z位)设置为指定值。接受十进制、十六进制和八进制编码。设置命名标志(例如DO)将被忽略。默认情况下,不会设置Z位。
+[no]ednsnegotiation
启用/禁用EDNS版本协商。默认情况下,启用EDNS版本协商。
+[no]ednsopt[=code[:value]]
指定带有代码点代码的EDNS选项,并可选择将值的有效负载指定为十六进制字符串。代码可以是EDNS选项域名(例如,NSID或ECS),也可以是任意数值+noednsopt清除要发送的EDNS选项。
+[no]expire
发送EDNS过期选项。
+[no]fail
如果收到SERVERFAIL,请不要尝试下一台服务器。默认情况是不尝试下一个服务器,这与正常的存根解析程序行为相反。
+[no]header-only
发送带有DNS报文头的查询,但不包含请求部分。默认情况是添加一个请求部分。设置此选项时,将忽略查询类型和查询域名。
+[no]identify
启用+short选项时,显示[or do not show]提供解析的IP地址和端口号。如果请求简短的解析,默认情况下不显示提供解析的服务器的源地址和端口号。
+[no]idnin
在输入时处理[do not process]IDN域名。这需要在编译时启用IDN SUPPORT。
默认情况下,当标准输出为tty时,处理IDN输入。当dig输出重定向到文件、管道和其他非tty文件描述符时,将禁用对输入的IDN处理。
+[no]idnout
在输出时转换[do not convert]微不足道的代码。这需要在编译时启用IDN SUPPORT。
当标准输出是tty时,默认情况是在输出上处理微不足道的代码。当dig输出重定向到文件、管道和其他非tty文件描述符时,将禁用对输出的puny代码处理。
+[no]ignore
忽略UDP响应中的截断,而不是使用TCP重试。默认情况下,会执行TCP重试。
+[no]keepopen
在查询之间保持TCP套接字打开并重用它,而不是为每次查找创建一个新的TCP套接字。默认值为+nokeeppon。
+[no]mapped
允许使用映射的IPv4或者IPv6地址。默认值为+mapped。
+[no]multiline
以详细的多行格式打印类似SOA记录的记录,并带有可读的注释。默认情况是将每条记录打印在一行上,以便于机器解析dig输出。
+ndots=D
将域名中必须出现的点数设置为D,才能将其视为绝对值。默认值是使用/etc/resolv.conf中的ndots语句定义的值,如果不存在ndots语句,则为1。点较少的域名被解释为相对域名,如果设置了+search,则将在/etc/resolv.conf中的search或domain指令中列出的域中进行搜索。
+[no]nsid
发送查询时包括EDNS域名服务器ID请求。
+[no]nssearch
设置此选项后,dig将尝试查找包含要查找的域名的区域的权威域名服务器,并显示每个域名服务器为该区域拥有的SOA记录。
+[no]onesoa
执行AXFR时,仅打印一条(起始)SOA记录。默认情况是打印开始和结束SOA记录。
+[no]opcode=value
将[restore]DNS消息操作码设置为指定值。默认值为QUERY(0)。
+[no]qr
在发送查询消息时切换查询消息的显示。默认情况下,不打印查询。
+[no]question
返回解析时切换查询的请求部分的显示。默认情况是将请求部分打印为注释。
+[no]rdflag
+[no]recurse的同义词。
+[no]recurse
切换查询中RD(recursion desired,所需递归)位的设置。这个位是默认设置的,这意味着dig通常发送递归查询。使用+nssearch选项时,以及使用+trace(初始递归查询除外)以获取根服务器列表时,会自动禁用递归。
+retry=T
将向服务器重试UDP查询的次数设置为T,而不是默认值2。与+trys不同,这不包括初始查询。
+[no]rrcomments
在输出中切换每个记录注释的显示(例如,有关DNSKEY记录的可读密钥信息)。默认情况下,除非多行模式处于活动状态,否则不打印记录注释。
+[no]search
使用[do not use]resolv.conf中searchlist或domain指令定义的搜索列表(如果有)。默认情况下不使用搜索列表。
resolv.conf中的“ndots”(默认值1)可能被+ndots覆盖,它决定了域名是否被视为相对域名,从而决定了最终是否执行搜索。
+[no]short
提供一个简洁的解析。默认情况是以详细的形式打印解析。此选项始终具有全局效果;它不能全局设置,然后在每次查找的基础上重写。
+[no]showsearch
执行[do not perform]显示中间结果的搜索。
+[no]sigchase
Chase DNSSEC签名链。要求使用-DDIG_SIGCHASE编译dig。此功能已被弃用。请改用“delv”命令。
+split=W
将资源记录中的长十六进制或base64格式字段拆分为W个字符块(其中W四舍五入到4的最接近倍数)+nosplit或+split=0导致字段根本不被拆分。默认值为56个字符,当多行模式处于活动状态时为44个字符。
+[no]stats
切换统计信息的打印:进行查询时,回复的大小等等。默认行为是在每次查找后将查询统计信息打印为注释。
+[no]subnet=addr[/prefix-length]
使用指定的IP地址或网络前缀发送(不发送)EDNS客户端子网选项。
dig+subnet=0.0.0.0/0,或简称dig+subnet=0,发送一个EDNS CLIENT-subnet选项,该选项的地址为空,源前缀长度为零,这向解析程序发出信号,表示解析此查询时不得使用客户端的地址信息。
+[no]tcp
查询域名服务器时使用[do not use]TCP。默认行为是使用UDP,除非请求类型any或ixfr=N查询,在这种情况下,默认为TCP。AXFR查询始终使用TCP。
+timeout=T
将查询的超时设置为T秒。默认超时为5秒。尝试将T设置为小于1将导致应用1秒的查询超时。
+[no]topdown
当追踪DNSSEC签名链时,执行自上而下的验证。要求使用-DDIG_SIGCHASE编译dig。此功能已被弃用。请改用“delv”命令。
+[no]trace
切换从根域名服务器跟踪要查找的域名的委派路径。默认情况下禁用跟踪。当启用跟踪时,dig会进行迭代查询以解析正在查找的域名。它将遵循根服务器的推荐,显示用于解决查找的每个服务器的解析。
如果还指定了@server,则只影响对根区域域名服务器的初始查询。
+当+trace被设置为更好地模拟来自域名服务器的默认查询时,dnssec也被设置。
+tries=T
将尝试对服务器进行UDP查询的次数设置为T,而不是默认值3。如果T小于或等于零,则尝试次数将静默地四舍五入为1。
+trusted-key=####
指定一个包含要与+sigchase一起使用的受信任密钥的文件。每个DNSKEY记录都必须在自己的行上。
如果未指定,dig将在当前目录中查找/etc/trusted-key.key,然后查找trusted-key.key。
要求使用-DDIG_SIGCHASE编译dig。此功能已被弃用。请改用“delv”命令。
+[no]ttlid
打印记录时显示[do not display]TTL。
+[no]ttlunits
以友好的人类可读时间单位“s”、“m”、“h”、“d”和“w”显示[do not display]TTL,表示秒、分钟、小时、天和周。和+ttlid同义。
+[no]unknownformat
以未知的RR类型表示格式打印所有RDATA(RFC 3597)。默认情况是以类型的表示格式打印已知类型的RDATA。
+[no]vc
查询域名服务器时使用[do not use]TCP。提供+[no]tcp的这种替代语法是为了向后兼容。“vc”代表“virtual circuit”,虚拟电路。
+[no]zflag
在DNS查询中设置[do not display]最后一个未分配的DNS报文头标志。默认情况下,此标志处于禁用状态。
组合查询
dig的BIND 9实现支持在命令行上指定多个查询(除了支持-f批处理文件选项之外)。每个查询都可以提供自己的一组标志、选项和查询选项。
在这种情况下,每个查询参数在上面描述的命令行语法中表示一个单独的查询。每个都包含任何标准选项和标志、要查找的域名、可选的查询类型和类以及应应用于该查询的任何查询选项。
还可以提供一组应用于所有查询的全局查询选项。这些全局查询选项必须位于命令行上提供的域名、类、类型、选项、标志和查询选项的第一个元组之前。任何全局查询选项(+[no]cmd选项除外)都可以被一组特定于查询的查询选项覆盖。例如:
dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
显示了如何从命令行使用dig进行三次查找:www.isc.org的ANY查询、127.0.0.1的反向查找和isc.org的NS记录的查询。应用了+qr的全局查询选项,因此dig显示了它为每次查找进行的初始查询。最终查询的本地查询选项为+noqr,这意味着dig在查找isc.org的NS记录时不会打印初始查询。
IDN支持
如果dig是用IDN(internationalized domain name,国际化域名)支持构建的,它可以接受和显示非ASCII域名。dig在向DNS服务器发送请求或显示来自服务器的回复之前,适当地转换域名的字符编码。如果出于某种原因想要关闭IDN支持,请使用参数+noidnin和+noidnout或定义IDN_DISABLE环境变量。返回代码
dig返回代码为:
0:一切顺利,包括NXDOMAIN
1:使用错误
8:无法打开批处理文件
9:服务器没有回复
10:内部错误
相关文件
/etc/resolv.conf、${HOME}/.digrc
相关命令及参考
delv,host、named、dnssec keygen,RFC 1035。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/202206.html