Linux下dig命令使用
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的输出信息很详细。你可能不需要所有的输出,
但是它确实值得知道。
=======================================================================
下面是一个带有注释的查询:
$ 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保留。
===========================================================================
我们可以查询什么?
Dig可以让你有效地查询DNS,最常用的查询是A记录,TXT(文本注释),MX记录,NS记录,或者任意综合查询。
查找yahoo.com的A记录:(此处一定是域而不是主机,如我公司为xinpindao.com)
dig yahoo.com A +noall +answer
查找yahoo.com MX记录的列表:
dig yahoo.com MX +noall +answer
查找yahoo.com的权威DNS:
dig yahoo.com NS +noall +answer
查询上面所有的记录:
dig yahoo.com ANY +noall +answer
在现在这种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.
查找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)"
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配置:
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)。
本HOWTO的官方出处是http://www.madboa.com/geek/dig/
Linux下dig命令使用的更多相关文章
- Linux下ps命令详解 Linux下ps命令的详细使用方法
http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...
- 例解 Linux 下 Make 命令
Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一.管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题.本文我们将用一些实例来讨论 make ...
- Linux下who命令之C语言实现
Linux下who命令之C语言实现 Step1:前期准备 首先要有一个清楚的认识:linux中一切皆文件 实现who命令,who命令也是Linux中的一个文件,那我们怎么找到它呢?我们可以" ...
- linux下history命令显示历史指令记录的使用方法
Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中.默认保存1000条,你也可以更改这个值 ...
- linux下svn命令使用大全
最近经常使用svn进行代码管理,这些命令老是记不住,得经常上网查,终于找了一个linux下svn命令使用大全:1.将文件checkout到本地目录 svn checkout path(path是服务器 ...
- Linux下rz命令使用的实例详解
Linux中rz命令和sz命令都可用于文件传输,而rz命令主要用于文件的上传,下面将通过几个实例来给大家详细介绍下Linux下rz命令的用法,一起来学习下吧. rz命令可以批量上传文件,当然也可上传单 ...
- Linux下rar命令详解
Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...
- linux下tar命令详解
linux下tar命令详解 tar是Linux环境下最常用的备份工具之一.tar(tap archive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件.ta ...
- 阿里云OneinStack,Linux下tomcat命令
阿里云OneinStack,Linux下tomcat命令 Linux下如何查看tomcat是否启动在Linux系统下,重启Tomcat使用命令操作的首先,进入Tomcat下的bin目录cd /usr/ ...
随机推荐
- Apache搭建多个站点方法详解
www.111cn.net 编辑:Bolshevik 来源:转载 Apache的虚拟主机是一种允许在同一台机器上配置多个不同站点的web服务器环境的,就是iis一样可以创建多站点了,但是apache需 ...
- hive-jdbc/odbc的解读和看法
当前的项目中, 涉及到了hive-jdbc/odbc这块, 因此把这几天所调研的资料作一份总结.本文讲解hive-jdbc/hive-odbc的实现, 以期对jdbc/odbc规范和实现有个较深入的理 ...
- 如何在ALV_Grid的函数中定义下拉列表
转自 http://www.cnblogs.com/VerySky/articles/2392262.htmlABAP--如何在ALV_Grid的函数中定义下拉列表 REPORT. ********* ...
- 一次性编译所有T-Code
SGEN, 然后选择Generate all,或regenerate ...... 转的,My question: 这个不太懂能干什么
- codeforces 192 c
link: http://codeforces.com/contest/330/problem/C broute force but you must be careful about some tr ...
- leetcode 106 Construct Binary Tree from Inorder and Postorder Traversal----- java
Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- hdu1074 状压DP、栈实现记录路径
题意:给了几门学科作业.它们的截止提交期限(天数).它们的需要完成的时间(天数),每项作业在截止日期后每拖延一天扣一学分,算最少扣的学分和其完成顺序. 一开始做的时候,只是听说过状态压缩这个神奇的东西 ...
- kuangbin_UnionFind D (HDU 3038)
加权并查集 似乎就是在想这题的时候突然理解了之前看E题没看懂的标准加权解法 值得注意的技巧 为了让区间之前连成树 形式设定为为(l, r] 接受l的输入后先自减一下就可以了 #include < ...
- ps白平衡
ps白平衡:在正常光线下看起来是白颜色的东西在有色光或者较暗的光线下看起来可能就不是白色,还有荧光灯下的"白"也是"非白".对于这一切如果能调整白平衡,则在所得 ...
- /bin/rm: Argument list too long解決方法
rm.cp.mv是unix下面常用到的檔案處理指令,當我們需要刪除大量的log檔案,如果檔案數太多就會出現此訊息[/bin/rm: Argument list too long]解決方式如下: 例如要 ...