1. dig domain, 经过server能够查到该域名被哪一个server给解析了php
2. dig @dns domain 不走/etc/resolve.conf,直接走指定的dnshtml
-----------------------------------------------------------------------------------------------------------------------------------------------linux
转自:http://www.cnblogs.com/daxian2012/archive/2013/01/10/2854126.htmlshell
译者序:
能够这样说,翻译本篇文档的过程就是我从新学习DNS的过程,dig命令能够帮助咱们学习DNS的原理,配置,以及其查询过程。之前使用dig仅仅是查询一下A记录或者MX记录,如今发现其功能真的不是通常的强大。但愿本文对英文不是太好的朋友在使用Linux和DNS时有些帮助。
本HOWTO的官方出处是http://www.madboa.com/geek/dig/。
因为此文档出现较早,本文中涉及到的一些例子可能和如今实际查询过程当中查询到的结果有些不一致,可是为了保证译文与做者的原文一致,我并无对这些内容作任何修改。另外因为本人的英语和语文都不是那么好,有些内容可能翻译得不是很流畅或者词不达意,但愿高手予以指点或者经过Email告知。谢谢!
Victor Chen(kubryjsc@163.com)
6/22/2008 译毕windows
Dig简介:
Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具。因为一直缺失Dig man page文档,本文就权当一个dig使用向导吧。Dig的源码是ISC BIND大包的一部分,可是大多编译和安装Bind的文档都不把它包括在内,可是在linux系统下,它一般是某个包的一部分,在Gentoo下是bind-tools,在Redhat/Fedora下是 bind-utils,或者在Debian下是 dnsutils。
若是你要查找Bind的配置相关的信息,你参考个人文章:Bind for the mall LAN
(http://www.madboa.com/geek/soho-bind/)。
看懂默认输出:
最简单最多见的查询是查询一台主机,可是默认状况下,Dig的输出信息很详细。你可能不须要全部的输出,
可是它确实值得知道。缓存
=======================================================================bash
$ dig www.isc.org
上面是我调用dig 的命令行。服务器
; <<>> DiG 9.2.3 <<>> www.isc.org ;; global options: printcmd Dig的部分输出告诉咱们一些有关于它的版本信息(version 9.2.3)和全局的设置选项,若是+nocmd在命令行下是第一个参数的话,那么这部分输出能够经过加+nocmd的方式查询出来。 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43071 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 在这里,Dig告诉咱们一些从DNS返回的技术信息,这段信息能够用选项 +[no]comments来控制显示,可是当心,禁止掉comments也可能关闭一些其它的选项。 ;; QUESTION SECTION: ;www.isc.org. IN A 在这个查询段中,Dig显示出咱们查询的输出,默认的查询是查询A记录,你能够显示或者禁止掉这些用+[no]question选项 ;; ANSWER SECTION: www.isc.org. 600 IN A 204.152.184.88 最后,咱们获得咱们查询的结果。www.isc.org 的地址是204.152.184.8,我不知道为何大家更喜欢过滤掉这些输出,可是你能够用+[no]answer保留这些选项。 ;; AUTHORITY SECTION: isc.org. 2351 IN NS ns-int.isc.org. isc.org. 2351 IN NS ns1.gnac.com. isc.org. 2351 IN NS ns-ext.isc.org. 这段权威说明告诉咱们哪一个DNS服务器给咱们提供权威的答案。在这个例子中,isc.org有3个Name Server,你能够用+[no]authority选项保留这段输出。 ;; ADDITIONAL SECTION: ns1.gnac.com. 171551 IN A 209.182.216.75 ns-int.isc.org. 2351 IN A 204.152.184.65 ns-int.isc.org. 2351 IN AAAA 2001:4f8:0:2::15 这些额外选项颇有表明性地包含了列出的权威DNS的IP地址,这段输出能够用+[no]additional选项保留。 ;; Query time: 2046 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Aug 27 08:22:26 2004 ;; MSG SIZE rcvd: 173
最后一段默认输出包含了查询的统计数据,能够用+[no]stats保留。网络
===========================================================================app
Dig可让你有效地查询DNS,最经常使用的查询是A记录,TXT(文本注释),MX记录,NS记录,或者任意综合查询。
在如今这种IPv4和IPV6混用的状况下,你也可使用AAAA的选项查询主机的IPv6 AAAA记录:
dig www.isc.org AAAA +short
若是你要查询的域容许转发,你也能够查询到相关的信息,好比DNS记录在internet上的生存周期,可是,如今只有不多的DNS容许无限制转发。
当咱们须要一个快速回答时,+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.
经过它的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.
能够用 -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)" done
查询命令以下:
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配置:
对于这两条规则来讲,还有一些例外状况,好比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
建立属于你本身的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文件!
你多是个traceroute的狂热爱好者,常常喜欢查看如何从点A链接点B。那你可使用dig +trace选项作相似的事。
dig gentoo.de +trace
你能够在dig输出的头部分看到根DNS,而后找到负责解析全部*.de的DNS,最后找到gentoo.de的域名IP。
做为一个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
我喜好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 去的,怪麻烦的。
********************************
你能够到 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 查询。
标志
参数
查询选项
多条查询
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其中: