Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具

Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具
查找yahoo.com的A记录:(此处必定是域而不是主机,如我公司为xinpindao.com)
dig yahoo.com A +noall +answerlinux

查找yahoo.com MX记录的列表:
dig yahoo.com MX +noall +answershell

查找yahoo.com的权威DNS:
dig yahoo.com NS +noall +answerwindows

查询上面全部的记录:
dig yahoo.com ANY +noall +answer缓存

在如今这种IPv4和IPV6混用的状况下,你也可使用AAAA的选项查询主机的IPv6 AAAA记录:
dig www.isc.org AAAA +short
若是你要查询的域容许转发,你也能够查询到相关的信息,好比DNS记录在internet上的生存周期,可是,现
在只有不多的DNS容许无限制转发。bash

咱们怎样查询?得到精简答案?
当咱们须要一个快速回答时,+short选项是你最好的朋友:
dig www.isc.org +short
204.152.184.88服务器

得到一个不是十分精简的答案?
精简答案和只有一个答案是不同的,网络

得到没有附加信息的详细答案的方法是使用+noall选项,这样就只保留你想要的输出。
下面是只有一个答案的精简查询,最后包含全部的配置信息,包括TTL数据,格式化的BIND配置信息。
$ dig fsf.org mx +short
20 mx20.gnu.org.
30 mx30.gnu.org.
10 mx10.gnu.org.
$ dig +nocmd fsf.org mx +noall +answer
fsf.org. 3583 IN MX 30 mx30.gnu.org.
fsf.org. 3583 IN MX 10 mx10.gnu.org.
fsf.org. 3583 IN MX 20 mx20.gnu.org.app

得到一个详细答案?
经过它的man page,你能够经过+multiline选项得到冗长的多行模式人性化注释的DSN的SOA记录,通常来讲,
用+multiline选项得到的信息能够显示不少,就像BIND配置文件同样。
$ dig +nocmd ogi.edu any +multiline +noall +answer
ogi.edu. 14267 IN A 129.95.59.31
ogi.edu. 14267 IN MX 5 cse.ogi.edu.
ogi.edu. 14267 IN MX 15 hermes.admin.ogi.edu.
ogi.edu. 14267 IN SOA zeal.admin.ogi.edu. hostmaster.admin.ogi.edu. (
200408230 ; serial
14400 ; refresh (4 hours)
900 ; retry (15 minutes)
3600000 ; expire (5 weeks 6 days 16 hours)
14400 ; minimum (4 hours)
)
ogi.edu. 14267 IN NS zeal.admin.ogi.edu.
ogi.edu. 14267 IN NS cse.ogi.edu.
ogi.edu. 14267 IN NS fork.admin.ogi.edu.dom

查找PTR记录?
能够用 -x的选项查找IP地址的主机名。
$ dig -x 204.152.184.167 +short
mx-1.isc.org.
在这个循环中,脚本很灵活地在给出的子网中映射出名字。
#!/bin/bash
NET=18.7.22
for n in $(seq 1 254); do
ADDR=${NET}.${n}
echo -e "${ADDR}\t$(dig -x ${ADDR} +short)"
donetcp

查询一个不一样的命名服务器?
查询命令以下:
dig @ns1.google.com www.google.com
使用/etc/resolv.conf里面的记录查询
主机将从/etc/resolv.conf文件里面自动查询DNS记录
$ host www
www.madboa.com has address 65.102.49.170
可是,默认状况下,dig会产生出一些意想不到的输出。若是你想查询本地主机名而不是全域名时候,使用
+search 选项
dig www +search

处理大部分的查询?
若是你想查询大量的主机名,你能够把它们存放在一个文本文件中(一条记录一行),使用带-f参数的dig来依
次查询。

查询大量的主机名

dig -f /path/to/host-list.txt

相同的,更明确的输出

dig -f /path/to/host-list.txt +noall +answer
可是我要告诉你的是,dig 9.2.3以及之后的版本都不支持使用-f的选项反向查询了。
验证DNS映射
不正确的DNS配置会给你带来不少苦恼,你能够经过以下两种方式验证你的DNS配置:
1.每一个主机名应该被解析到一个IP地址,并且那个IP地址也应该反指向那个主机名。
2.若是你子网上一个地址被反指向一个主机名,那么那个主机名也必须指向这个IP。
对于这两条规则来讲,还有一些例外状况,好比CNAME应该首先解析到另一个主机名,并且只能指向一个IP
,有时多个主机名指向了相同的IP地址,可是那个IP只能有一个PTR记录。
综上,这些有助于你检查你的DNS映射是否像你想象的那样工做。
你也能够编写一个测试脚本写入你已知的主机名,以下所示,内容很简单;它执行时当捕捉到一个CNAME时它
就会中断,若是多个主机名指向同一个IP地址它会报错。咱们假设这个文件包含你的主机名叫作named-hosts

#!/bin/bash
#

test DNS forward- and reverse-mapping

#

edit this variable to reflect local class C subnet(s)

NETS="192.168.1 192.168.2"

Test name to address to name validity

echo
echo -e "\tname -> address -> name"
echo '----------------------------------'
while read H; do
ADDR=$(dig $H +short)
if test -n "$ADDR"; then
HOST=$(dig -x $ADDR +short)
if test "$H" = "$HOST"; then
echo -e "ok\t$H -> $ADDR -> $HOST"
elif test -n "$HOST"; then
echo -e "fail\t$H -> $ADDR -> $HOST"
else
echo -e "fail\t$H -> $ADDR -> [unassigned]"
fi
else
echo -e "fail\t$H -> [unassigned]"
fi
done < named-hosts

Test address to name to address validity

echo
echo -e "\taddress -> name -> address"
echo '-------------------------------------'
for NET in $NETS; do
for n in $(seq 1 254); do
A=${NET}.${n}
HOST=$(dig -x $A +short)
if test -n "$HOST"; then
ADDR=$(dig $HOST +short)
if test "$A" = "$ADDR"; then
echo -e "ok\t$A -> $HOST -> $ADDR"
elif test -n "$ADDR"; then
echo -e "fail\t$A -> $HOST -> $ADDR"
else
echo -e "fail\t$A -> $HOST -> [unassigned]"
fi
fi
done
done

有趣的dig
建立属于你本身的named.root文件
任何链接到internet 的DNS服务器确定会有InterNIC的named.root文件的拷贝,文件列出全部internet的根
DNS,若是你不怕麻烦的话,你能够常常从InterNIC的ftp服务器上把它下载下来,或者,你可使用dig命令
建立属于你本身的时髦的named.root

compare with ftp://ftp.internic.net/domain/named.root

dig +nocmd . NS +noall +answer +additional
你的TTL值在这边可能会很小,可是它是你找到最新的named.root文件!

跟踪dig的查询路径
你多是个traceroute的狂热爱好者,常常喜欢查看如何从点A链接点B。那你可使用dig +trace选项作相似
的事。
dig gentoo.de +trace
你能够在dig输出的头部分看到根DNS,而后找到负责解析全部*.de的DNS,最后找到gentoo.de的域名IP。

获取SOA记录
做为一个DNS管理员,我有时会(对DNS配置)作一些改变,而且想知道个人DNS解析是否推送的仍是旧数据,
这个+nssearch选项能够给你的公众服务器提供清楚的统计信息。

the unvarnished truth

dig cse.ogi.edu +nssearch

the same, displaying only serial number and hostname

dig cse.ogi.edu +nssearch | cut -d' ' -f4,11

解释TTL数值
我喜好google有不少缘由,其中一个缘由就是它在个人WEB日志中提供了精确的连接,它会使我很容易地指出
哪一种类型的查询引导人们来访问这个站点的页面。
出乎意料的是,我已经看到不少请求要求查询TTL数值,我历来没想到TTL会成为最受欢迎的东东,可是你天天
都在学习新东西,因此,应你们的要求,这里稍微介绍一下TTL。
若是你从本地DNS查询互联网地址,服务器指出从哪里得到权威的答案并得到地址,一旦服务器获知答案,它
将这个答案保存在本地缓存中以避免你在稍后的时间内再次查询一样的地址,这样它就会很快地从缓存中获取你
要的答案,比你再次从internet查询要快不少。
当域管理员配置DNS记录时,他们能够决定这个记录能够在缓存中保存多长时间,这就是TTL数值(一般用多少
秒来表示)。
一般地,远端服务器通常对记录的缓存只保存TTL数值长的时间。时间过时后,服务器会刷新它的本地缓存并
从新查询一个权威答案。
当你用dig来查询DNS服务器某条记录时,服务器会告诉dig这条记录能够在缓存中保持的时间长短。
举个例子,像上面写的那样,gmail.com域的MX记录的TTL值是300s,gmail.com域的管理员要求远端服务器缓
存它的MX记录不能高于5分钟,因此当你第一次查询那个记录(gmail.com的MX记录)时,dig会告诉你一个300
的TTL。
$ dig +nocmd gmail.com MX +noall +answer
gmail.com. 300 IN MX 20 gsmtp57.google.com.
gmail.com. 300 IN MX 10 gsmtp171.google.com.
若是你一段时间后再去查,你会发现TTL值减小为280(中间隔了20s)。
$ dig +nocmd gmail.com MX +noall +answer
gmail.com. 280 IN MX 10 gsmtp171.google.com.
gmail.com. 280 IN MX 20 gsmtp57.google.com.
若是你的时间计算得足够好,你会获取这条记录的最后生存时间。
$ dig +nocmd gmail.com MX +noall +answer
gmail.com. 1 IN MX 10 gsmtp171.google.com.
gmail.com. 1 IN MX 20 gsmtp57.google.com.
在那以后,你查询的DNS服务器会“忘记”这个问题的答案,在你下次查询这条记录时,整个循环又将开始(
本例子中是300s)。

在 unix 和 linux 下,建议你们使用 dig 命令来代替 nslookup。 dig 命令的功能比 nslookup 强大不少,不像 nslookkup 还得 set 来 set 去的,怪麻烦的。

下面是 dig 的一些比较经常使用的命令:

dig 最基本的用法

dig @server qianlong.com

用 dig 查看 zone 数据传输

dig @server qianlong.com AXFR

用 dig 查看 zone 数据的增量传输

dig @server qianlong.com IXFR=N

用 dig 查看反向解析

dig -x 124.42.102.203 @server

查找一个域的受权 dns 服务器

dig qianlong.com +nssearch

从根服务器开始追踪一个域名的解析过程

dig qianlong.com +trace
dig @8.8.8.8 www.so.com +trace

查看你使用的是哪一个 F root dns server

dig +norec @F.ROOT-SERVERS.NET HOSTNAME.BIND CHAOS TXT

查看 bind 的版本号

dig @bind_dns_server CHAOS TXT version.bind


你能够到 www.isc.org 去下载一个 bind for windows 的版本安装,安装后就能够在 windows 上使用 dig 命令了。^O^
ftp://ftp.isc.org/isc/bind/contrib/ntbind-9.3.0/BIND9.3.0.zip


用途DNS 查询实用程序。语法dig [@server] [-b address] [-c class] [-f filename] [-k filename] [ -n ][-p port#] [-t type] [-x addr] [-y name:key] [name] [type] [class] [queryopt...]dig [-h]dig [global-queryopt...] [query...]描述dig(域信息搜索器)命令是一个用于询问 DNS 域名服务器的灵活的工具。它执行 DNS 搜索,显示从受请求的域名服务器返回的答复。多数 DNS 管理员利用 dig 做为 DNS 问题的故障诊断,由于它灵活性好、易用、输出清晰。虽然一般状况下 dig 使用命令行参数,但它也能够按批处理模式从文件读取搜索请求。不一样于早期版本,dig 的 BIND9 实现容许从命令行发出多个查询。除非被告知请求特定域名服务器,dig 将尝试 /etc/resolv.conf 中列举的全部服务器。当未指定任何命令行参数或选项时,dig 将对“.”(根)执行 NS 查询。标志-b address 设置所要询问地址的源 IP 地址。这必须是主机网络接口上的某一合法的地址。-c class 缺省查询类(IN for internet)由选项 -c 重设。class 能够是任何合法类,好比查询 Hesiod 记录的 HS 类或查询 CHAOSNET 记录的 CH 类。-f filename 使 dig 在批处理模式下运行,经过从文件 filename 读取一系列搜索请求加以处理。文件包含许多查询;每行一个。文件中的每一项都应该以和使用命令行接口对 dig 的查询相同的方法来组织。-h 当使用选项 -h 时,显示一个简短的命令行参数和选项摘要。-k filename 要签署由 dig 发送的 DNS 查询以及对它们使用事务签名(TSIG)的响应,用选项 -k 指定 TSIG 密钥文件。-n 缺省状况下,使用 IP6.ARPA 域和 RFC2874 定义的二进制标号搜索 IPv6 地址。为了使用更早的、使用 IP6.INT 域和 nibble 标签的 RFC1886 方法,指定选项 -n(nibble)。-p port# 若是须要查询一个非标准的端口号,则使用选项 -p。port# 是 dig 将发送其查询的端口号,而不是标准的 DNS 端口号 53。该选项可用于测试已在非标准端口号上配置成侦听查询的域名服务器。-t type 设置查询类型为 type。能够是 BIND9 支持的任意有效查询类型。缺省查询类型是 A,除非提供 -x 选项来指示一个逆向查询。经过指定 AXFR 的 type 能够请求一个区域传输。当须要增量区域传输(IXFR)时,type 设置为 ixfr=N。增量区域传输将包含自从区域的 SOA 记录中的序列号改成 N 以后对区域所作的更改。-x addr 逆向查询(将地址映射到名称)能够经过 -x 选项加以简化。addr 是一个以小数点为界的 IPv4 地址或冒号为界的 IPv6 地址。当使用这个选项时,无需提供 name、class 和 type 参数。dig 自动运行相似 11.12.13.10.in-addr.arpa 的域名查询,并分别设置查询类型和类为 PTR 和 IN。-y name:key 您能够经过命令行上的 -y 选项指定 TSIG 密钥;name 是 TSIG 密码的名称,key 是实际的密码。密码是 64 位加密字符串,一般由 dnssec-keygen(8)生成。当在多用户系统上使用选项 -y 时应该谨慎,由于密码在 ps(1)的输出或 shell 的历史文件中多是可见的。当同时使用 dig 和 TSCG 认证时,被查询的名称服务器须要知道密码和解码规则。在 BIND 中,经过提供正确的密码和 named.conf 中的服务器声明实现。参数global-queryopt... 全局查询选项(请参阅多个查询)。查询 查询选项(请参阅查询选项)。查询选项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使用 [不使用] 搜索列表或 resolv.conf 中的域伪指令(若是有的话)定义的搜索列表。缺省状况不使用搜索列表。+[no]defname不建议看做 +[no]search 的同义词。+[no]aaonly该选项不作任何事。它用来提供对设置成未实现解析器标志的 dig 的旧版本的兼容性。+[no]adflag在查询中设置 [不设置] AD(真实数据)位。目前 AD 位只在响应中有标准含义,而查询中没有,可是出于完整性考虑在查询中这种性能能够设置。+[no]cdflag在查询中设置 [不设置] CD(检查禁用)位。它请求服务器不运行响应信息的 DNSSEC 合法性。+[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 为重试次数。+ndots=D出于彻底考虑,设置必须出如今名称 D 的点数。缺省值是使用在 /etc/resolv.conf 中的 ndots 语句定义的,或者是 1,若是没有 ndots 语句的话。带更少点数的名称被解释为相对名称,并经过搜索列表中的域或文件 /etc/resolv.conf 中的域伪指令进行搜索。+bufsize=B设置使用 EDNS0 的 UDP 消息缓冲区大小为 B 字节。缓冲区的最大值和最小值分别为 65535 和 0。超出这个范围的值自动舍入到最近的有效值。+[no]multiline以详细的多行格式显示相似 SOA 的记录,并附带可读注释。缺省值是每单个行上显示一条记录,以便于计算机解析 dig 的输出。多条查询dig 的 BIND9 支持在命令行上指定多个查询(支持 -f 批处理文件选项的附加功能)。每条查询可使用本身的标志位、选项和查询选项。在这种状况下,在上面描述的命令行语法中,每条查询自变量表明一个个别查询。每一条由任意标准选项和标志、待查询名称、可选查询类型和类以及任何适用于该查询的查询选项。也可使用对全部查询均有效的查询选项全局集合。全局查询选项必须位于命令行上第一个名称、类、类型、选项、标志和查询选项的元组以前。任何全局查询选项(除了 +[no]cmd 选项)能够被下面的查询特别选项重设。例如:dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr显示 dig 如何从命令行出发进行三个查询:一个针对 www.isc.org的任意查询、一个 127.0.0.1 的逆向查询,以及一个 isc.org 的 NS 记录查询。应用了 +qr 的全局查询选项,以便 dig 显示进行每条查询的初始查询。最后那个查询有一个本地查询选项 +noqr,表示 dig 在搜索 isc.org 的 NS 记录时不显示初始查询。示例一个典型的 dig 调用相似:dig @server name type其中:server待查询名称服务器的名称或 IP 地址。能够是用点分隔的 IPv4 地址或用冒号分隔的 IPv6 地址。当由主机提供服务器参数时,dig 在查询域名服务器前先解析那个名称。若是没有服务器参数能够提供,dig 参考 /etc/resolv.conf,而后查询列举在那里的域名服务器。显示来自域名服务器的应答。name将要查询的资源记录的名称。type显示所需的查询类型 - ANY、A、MX、SIG,以及任何有效查询类型等。若是不提供任何类型参数,dig 将对纪录 A 执行查询。

相关文章
相关标签/搜索