dig

查询DNS域名服务器


语法格式

dig [server] [-b addr] [-c class] [-f batch] [-k key] [-m] [-p port]
        [-q name] [-t type] [-x addr] [-y [hmac:]name:key] [-4] [-6]
        [global-query-opts] [host] [type] [class] [local-query-opts]
dig [-h] [-v]

命令简介

dig(domain information groper)是一种灵活的工具,用于查询DNS域名服务器,显示域名服务器返回的查询结果。正是由于其灵活性、易用及输出的信息明确,大多数DNS管理员都喜欢使用dig排解DNS问题。

在上述语法格式中,server是域名服务器的主机名或IP地址。当指定的server参数是主机名时,dig首先需要解析域名服务器的主机名,然后再查询域名服务器。如果未指定server参数,dig将查询/etc/resolv.conf文件,获取其中定义的域名服务器。host是欲查询的主机名(通常是规范域名)或IP地址(反向查询)。type表示查询的类型,可以是任何有效的查询类型,如ANY(查询任何资源记录)、A(查询IP地址)、NS(查询域名服务器)、SOA(查询区域授权记录)、MX(查询电子邮件服务器)、AXFR(查询区域配置文件)或SIG等。如果未提供类型参数,dig将会查询A记录。class是地址类型,如IN表示Internet。global-query-opts是全局查询选项,local-query-opts是本地查询选项,详见“查询选项”一节。

实际上,在dig命令的语法格式中,最常用的主要参数是域名服务器、主机名或IP地址,以及查询类型,简化的语法格式如下:

dig [server] host [type]

尽管dig命令主要用于命令行的交互环境,通过读取文件中的查询请求,dig命令也可用于批处理操作模式。与早期的版本不同,BIND 9允许dig在一个命令行中同时发布多个查询。

除非告诉dig查询特定的域名服务器,dig命令将会尝试查询/etc/resolv.conf文件定义的每一个域名服务器。如果没有指定任何选项与参数,dig将会访问根域名服务器,执行NS查询。

利用${HOME}/.digrc文件,也可以设置基于用户的默认查询方式。在执行dig命令时,如果${HOME}/.digrc文件存在,dig将会读取其中的内容,把其中预设的任何选项置于命令行参数之前,形成一个组合的命令行。

注意,IN与CH既是地址类型的名字,也是顶级域的名字。因此,必要时可以使用“-c”与“-t”选项分别指定地址类型和查询类型,使用“-q”选项指定域名,或在查询顶级域时使用“IN.”与“CH.”,以免混淆。

在BIND 9环境中,除了支持“-f”选项,采用批处理的查询方式之外,dig命令还可以在一个命令行上同时指定多个查询。每个查询参数表示一个单独的查询,每个查询可以指定一组普通选项、查询标志位和查询选项等。

全局查询选项可以出现在命令行的最前面,其作用范围适用于任何一个查询。除了“+[no]cmd”查询选项之外,本地查询选项能够取消全局查询选项。例如,

$ dig +qr www.isc.org any -x 159.226.97.84 isc.org ns +noqr

表示一个dig命令行能够同时执行3个查询:www.isc.org的任意资源记录查询,159.226.97.84地址的反向查询,以及isc.org域的NS资源记录的查询。全局查询选项“+qr”施加于每一个查询,表示dig命令应当显示每一个查询请求,而最后的查询中存在一个本地查询选项“+noqr”,意味着在dig命令查询isc.org域的NS资源记录时不需要显示查询请求。

命令选项

-b addr  设置查询请求的源IP地址。指定的地址addr必须是本地主机的有效网络接口地址、0.0.0.0或“::”。必要时也可以附加一个选用的端口号“#port”。

-c class  指定查询的地址类型。默认的地址类型是IN(Internet)。其他有效的地址类型是HS(Hesiod)和CH(Chaosnet)。

-f batch  表示以批处理的方式运行dig命令,读取指定文件batch中的一系列查询请求,依次执行每一个查询。batch是一个文本文件,其中包含一系列查询请求,每个查询请求占一行。每个查询请求的组成方式同命令行的用法完全一样。

-i  使用RFC1886标准的IP6.INT域执行IPv6地址的反向查询。

-k key  若想使用指定的事务签字(TSIG)签发dig命令发送的DNS查询及响应信息,可以使用“-k”选项指定一个TSIG密钥文件。当然,也可以使用命令行选项“-y”直接指定一个TSIG密钥本身。参见“-y”选项的说明。

-m  启用内存使用情况的调试功能。

-p port  如果需要使用非标准的端口号发送查询请求,可以使用“-p”选项。其中port是一个端口号,用于取代默认的端口号53。仅当域名服务器使用非标准的端口号监听DNS查询时,这个选项才有用。

-q name  用于指定欲查询的域名,以区别于其他参数。

-t type  设置查询类型为指定的类型type。指定的查询类型可以是BIND 9支持的任何有效查询类型。默认的查询类型是A,除非指定了“-x”选项,表示反向查询。如果指定的类型是AXFR,表示请求传输区域配置文件。当请求传输增量区配置信息(IXFR)时,可以把type设置成“ixfr=n”,其中n是SOA资源记录的序列号,表示传输自指定的序列号迄今区内发生变动的配置信息。

-x addr  反向查询,表示把IP地址解析成主机名。其中,addr是一个IPv4或IPv6地址。指定“-x”选项时,不需要提供名字、地址类型和查询类型,dig自动地执行类似于11.12.13.10.in-addr.arpa的反向名字查询,分别设置查询类型和地址类型为PTR与IN。IPv6地址检索通常采用IP6.ARPA域的格式。

-y [hmac:]name:key  指定TSIG密钥。其中,hmac是TSIG的类型,默认的类型是HMAC-MD5,name是TSIG密钥的名字,key是实际的密钥。密钥是一个64位编码的字符串。通常是由dnssec-keygen命令生成的。当dig命令使用TSIG密钥认证时,查询的域名服务器需要知道密钥及使用的算法,而这需要在named.conf配置文件使用server语句、key语句和密钥进行适当的配置。

-4, -6  强制dig仅使用IPv4或IPv6查询。

-h  显示dig命令的语法格式、命令行选项、参数及其简单说明。

-v  显示dig命令的版本信息,然后退出。

查询选项

dig命令支持的一系列能够影响其查询方式和输出结果的查询选项。每个查询选项由一个关键字加前置加号“+”组成。部分查询选项通过增加“no”的方式用于否定查询选项的意义,如设置或清除查询请求头信息中的标志位,部分查询选项用于确定究竟显示哪一部分查询结果,其他查询选项采用赋值的方式,用于确定超时或重新尝试的策略。

根据查询选项出现在命令行中的位置,查询选项分为全局查询选项与本地查询选项。当查询选项位于host参数之前的任何位置时,查询选项就是全局查询选项,位于host参数之后的任何位置时,查询选项就是本地查询选项。全局查询选项施加于所有的查询,本地查询选项仅影响特定的查询。下面是dig命令支持的部分查询选项。

+[no]aaonly, +[no]aaflag  设置或清除查询分组数据中的aa标志位。

+[no]additional  显示或禁止显示附加信息部分(即“additional”节)。dig命令通常会显示附加信息部分。

+[no]adflag  设置或清除查询分组数据中的AD(Authentic Data)标志位。这意味着请求域名服务器说明返回的所有查询结果和授权信息部分是否已经按照域名服务器的安全策略做了安全验证。AD=1表示所有资源记录已经验证是安全的,查询结果没有超出OPT-OUT范围。AD=0表示查询结果的部分信息是不安全的或未做过验证。

+[no]all  设置或清除所有的显示标志。

+[no]answer  显示或禁止显示查询结果部分(即“answer”节)。dig命令通常会显示查询结果部分。

+[no]authority  显示或禁止显示授权信息部分(即“authority”节)。dig命令通常会显示授权信息部分。

+[no]besteffort  尝试显示或禁止显示残缺的响应信息。默认的做法是禁止显示残缺的响应信息。

+[no]cdflag  设置或清除查询分组数据中的CD(Checking Disabled)标志位。这意味着请求域名服务器不要执行响应信息的DNSSEC验证。

+[no]cl  输出资源记录信息时显示或禁止显示CLASS信息。

+[no]cmd  显示或禁止显示dig命令的版本信息和预置的查询选项。dig命令通常会输出命令版本等基本说明信息。

+[no]comments  表示是否显示注释行与标题信息。dig命令通常会显示注释行和标题信息。

+[no]dnssec  设置或清除查询分组数据中的DO(DNSSEC OK)标志位,表示发送或禁止发送DNSSEC记录(位于查询请求的OPT附加节)。

+[no]fail  如果收到SERVFAIL响应信息,允许或禁止尝试查询下一个域名服务器。默认的做法是禁止尝试查询下一个域名服务器。

+[no]identify  当启用了“+short”选项时,表示显示还是禁止显示提供查询结果的域名服务器的IP地址和端口号。如果要求提供简洁的查询结果(参见“+short”查询选项),默认的做法是不显示提供查询结果的域名服务器的源地址和端口号。

+[no]ignore  UDP响应信息不完整时忽略之,不必采用TCP连接重试。默认的做法是执行TCP重试操作。

+[no]multiline  以多行形式详细显示SOA资源记录或禁止多行显示。通常,dig命令每行显示一个资源记录,以便于解析dig命令的输出。因此,SOA记录将会压缩在一行中输出。

+[no]nsid  在发送查询请求时,指定是否包括EDNS域名服务器ID。

+[no]nssearch  指定这个查询选项时,dig将会尝试找出授权的域名服务器,其中的区配置信息中恰好包含欲查询的域名,显示区域中每个域名服务器的SOA记录。

+[no]qr  显示或禁止显示发送的查询请求。通常不显示查询请求。

+[no]question  返回查询结果时是否显示查询请求部分(即“question”节)。作为一种说明信息,dig命令通常会显示查询请求部分。

+[no]recurse  设置或清除查询分组数据中的RD(Recursion Desired)标志位。RD标志位是一个默认设置,意味着dig命令通常会发送递归的查询请求。当使用“+nssearch”或“+trace”查询选项时,dig命令将会自动禁用递归查询功能。

+[no]search  使用或禁止使用/etc/resolv.conf文件中由domain或search语句定义的域名检索列表,组合成完整的规范域名。通常,dig命令不使用域名检索列表。

+[no]short  提供详细的还是简洁的查询结果,即是否采用最简洁的形式回答查询请求。dig命令通常会提供详细的查询结果。

+[no]showsearch  执行或禁止执行显示中间结果的探索。

+[no]stats  表示是否显示查询统计信息。dig命令通常会显示查询的统计数据。

+[no]tcp, +[no]vc  查询域名服务器时使用或不使用TCP连接。默认的做法是使用UDP连接,除非请求的查询是AXFR或IXFR,此时要求使用TCP连接。

+[no]trace  在查询域名解析信息时,确定是否启用从根域名服务器开始的查询路径跟踪功能。dig命令通常禁用查询路径的跟踪功能。启用跟踪功能时,dig命令将会采用迭代查询方式解析域名信息,并从根域名服务器开始,显示每个DNS服务器处理域名解析请求时返回的查询结果。

+[no]ttlid  输出资源记录信息时显示或禁止显示TTL值。

+bufsize=bytes  设置使用EDNS0广播的UDP消息缓冲区的容量,单位为字节。最大和最小缓冲区的容量分别是65535字节和0。如果设置的数值大于0,将会引起dig命令发送EDNS查询。

+domain=dname  设置域名检索列表,使之包含指定的单个域dname。如同指定了“+search”查询选项一样,启用域名检索列表处理。注意,“+domain”查询选项指定的域同/etc/resolv.conf文件中domain语句定义的域的效果是相同的。

+edns=num  指定查询的EDNS版本。有效的版本值是0~255。设置EDNS版本将会引起dig发送EDNS查询。“+noedns”将会清除已设置的EDNS版本。

+ndots=dots  设置在规范域名中一个绝对域名必须存在的句点“.”的数量。默认值是/etc/resolv.conf文件中ndots语句定义的数量,如果语句不存在,默认值是1。句点少于指定数量或默认值的域名按相对域名解释,从而需要在/etc/resolv.conf文件search或domain语句中指定的域中检索。

+retry=count  设置重试UDP查询域名服务器的次数。重试的默认次数为2。与“+tries”不同,这里不包括原先已做过的查询。

+time=timeout  把查询的超时值设置为count秒。默认的超时值为5秒。如果设置的超时值小于1秒,dig自动调整为1秒。

+tries=count  设置尝试使用UDP查询域名服务器的次数。count的默认值为3次。如果指定的次数小于等于0,dig自动调整尝试次数为1。

应用实例

1. 查询指定域(如isc.org)的域名服务器。

$ dig isc.org ns

2. 利用dig命令的查询选项,仅仅显示用户想要的返回信息。

$ dig +noall isc.org ns +answer
isc.org.                 4781  IN      NS      ns.isc.afilias-nst.info.
isc.org.                 4781  IN      NS      ord.sns-pb.isc.org.
isc.org.                 4781  IN      NS      ams.sns-pb.isc.org.
isc.org.                 4781  IN      NS      sfba.sns-pb.isc.org.
$

3. 查询指定域(如isc.org)中SOA资源记录。

$ dig isc.org SOA

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z