Linux命令之dig命令挖出DNS的秘密
===
【初次见面】
我相信使用nslookup的同学一定比使用dig的同学多,所以还是有必要花些时间给大家介绍一下dig的。
dig,和nslookup作用有些类似,都是DNS查询工具。
dig,其实是一个缩写,即Domain Information Groper。
一些专业的DNS管理员在追查DNS问题时,都乐于使用dig命令,是看中了dig设置灵活、输出清晰、功能强大的特点。
【最简单的dig用法】
最简单的dig用法,当然就是直接输入dig按回车。
|
1
2
3
4
5
6
|
$ dig; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> //Dig命令的版本信息;; global options: +cmd;; Got answer:;; ->>HEADER< |
从上面的输出,你一定观察到了,当直接使用dig命令,不加任何参数和选项时,dig会向默认的上连DNS服务器查询“.”(根域)的NS记录。
【dig加个点】
刚才直接输入dig,这次我们在后面加上一个“.”,看看结果和刚才有何区别:
|
1
2
3
4
5
6
|
$ dig .; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> .;; global options: +cmd;; Got answer:;; ->>HEADER< |
【我想用google-DNS来查baidu.com的A记录】
|
1
2
3
4
5
6
7
|
$ dig @8.8.8.8 www.baidu.com A //命令格式为dig @dnsserver name querytype; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> @8.8.8.8 www.baidu.com A; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER< |
从这个例子,大家学习到了dig的基本的命令格式是:
|
1
|
dig @dnsserver name querytype |
如果你设置的dnsserver是一个域名,那么dig会首先通过默认的上连DNS服务器去查询对应的IP地址,然后再以设置的dnsserver为上连DNS服务器。
如果你没有设置@dnsserver,那么dig就会依次使用/etc/resolv.conf里的地址作为上连DNS服务器。
而对于querytype,如果你看过我上一篇有关nslookup命令的讲解,那么你应该对querytype有所了解,你可以设置A/AAAA/PTR/MX/ANY等值,默认是查询A记录。
【一些常用的选项】
1 -c选项,可以设置协议类型(class),包括IN(默认)、CH和HS。
2 -f选项,dig支持从一个文件里读取内容进行批量查询,这个非常体贴和方便。文件的内容要求一行为一个查询请求。来个实际例子吧:
|
1
2
3
4
5
6
7
8
9
10
11
|
$ cat querylist //文件内容,共有两个域名需要查询www.baidu.comwww.sohu.com$ dig -f querylist -c IN -t A//设置-f参数开始批量查询; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> www.baidu.com;; global options: +cmd;; Got answer:;; ->>HEADER<> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> www.sohu.com;; Got answer:;; ->>HEADER< |
3 -4和-6两个选项,用于设置仅适用哪一种作为查询包传输协议,分别对应着IPv4和IPv6。
4 -t选项,用来设置查询类型,默认情况下是A,也可以设置MX等类型,来一个例子:
|
1
2
3
4
5
6
|
$ dig roclinux.cn -t MX; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> roclinux.cn -t MX;; global options: +cmd;; Got answer:;; ->>HEADER< |
5 -q选项,其实它本身是一个多余的选项,但是它在复杂的dig命令中又是那么的有用。-q选项可以显式设置你要查询的域名,这样可以避免和其他众多的参数、选项相混淆,提高了命令的可读性,来个例子:
|
1
2
3
4
5
6
|
$ dig -q www.roclinux.cn; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> -q www.roclinux.cn;; global options: +cmd;; Got answer:;; ->>HEADER< |
6 -x选项,是逆向查询选项。可以查询IP地址到域名的映射关系。举一个例子:
|
1
2
3
4
5
6
|
$ dig -x 193.0.14.129; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> -x 193.0.14.129;; global options: +cmd;; Got answer:;; ->>HEADER< |
【dig特有的查询选项(query option)】
和刚才的选项不同,dig还有一批所谓的“查询选项”,这批选项的使用与否,会影响到dig的查询方式或输出的结果信息,因此对于这批选项,dig要求显式的在其前面统一的加上一个“+”(加号),这样dig识别起来会更方便,同时命令的可读性也会更强。
dig总共有42个查询选项,涉及到DNS信息的方方面面,如此多的查询选项,本文不会一一赘述,只会挑出最最常用的几个重点讲解。
【TCP代替UDP】
众所周知,DNS查询过程中的交互是采用UDP的。如果你希望采用TCP方式,需要这样:
|
1
2
3
4
5
6
|
$ dig +tcp www.baidu.com; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> +tcp www.baidu.com;; global options: +cmd;; Got answer:;; ->>HEADER< |
【默认追加域】
大家直接看例子,应该就能理解“默认域”的概念了,也就能理解+domain=somedomain的作用了:
|
1
2
3
4
5
6
|
dig +domain=baidu.com image; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> +domain=baidu.com image;; global options: +cmd;; Got answer:;; ->>HEADER< |
【跟踪dig全过程】
dig非常著名的一个查询选项就是+trace,当使用这个查询选项后,dig会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
$ dig +trace roclinux.cn ; <<>> DiG 9.2.4 <<>> +trace roclinux.cn ;; global options: printcmd. 335937 IN NS l.root-servers.net.. 335937 IN NS b.root-servers.net.. 335937 IN NS d.root-servers.net.. 335937 IN NS k.root-servers.net.. 335937 IN NS h.root-servers.net.. 335937 IN NS j.root-servers.net.. 335937 IN NS a.root-servers.net.. 335937 IN NS e.root-servers.net.. 335937 IN NS c.root-servers.net.. 335937 IN NS m.root-servers.net.. 335937 IN NS g.root-servers.net.. 335937 IN NS i.root-servers.net.. 335937 IN NS f.root-servers.net.;; Received 400 bytes from 10.23.0.231#53(10.23.0.231) in 0 ms //从本地DNS查找到根域DNS列表cn. 172800 IN NS c.dns.cn.cn. 172800 IN NS a.dns.cn.cn. 172800 IN NS b.dns.cn.cn. 172800 IN NS e.dns.cn.cn. 172800 IN NS ns.cernet.net.cn. 172800 IN NS d.dns.cn.;; Received 292 bytes from 192.228.79.201#53(b.root-servers.net) in 460 ms //选择了b.root-servers.net这台根域DNS来查找cn.域DNS列表roclinux.cn. 21600 IN NS ns11.edong.com.roclinux.cn. 21600 IN NS ns12.edong.com.;; Received 76 bytes from 203.119.27.1#53(c.dns.cn) in 0 ms //选择了c.dns.cn这台cn.域DNS服务器来查找roclinux.cn的DNS列表roclinux.cn. 3600 IN A 116.255.245.206roclinux.cn. 3600 IN NS ns12.edong.com.roclinux.cn. 3600 IN NS ns11.edong.com.;; Received 124 bytes from 61.147.124.145#53(ns11.edong.com) in 104 ms //最终查找到A记录 |
【精简dig输出】
1 使用+nocmd的话,可以节省输出dig版本信息。
2 使用+short的话,仅会输出最精简的CNAME信息和A记录,其他都不会输出。就像这样:
|
1
2
3
4
|
$ dig +short www.baidu.comwww.a.shifen.com.119.75.218.77119.75.217.56 |
3 使用+nocomment的话,可以节省输出dig的详情注释信息。
4 使用+nostat的话,最后的统计信息也不会输出。当+nocmd、+nocomment和+nostat都是用上,是这样:
|
1
2
3
4
5
|
$ dig +nocmd +nocomment +nostat www.baidu.com;www.baidu.com. IN Awww.baidu.com. 260 IN CNAME www.a.shifen.com.www.a.shifen.com. 244 IN A 119.75.217.56www.a.shifen.com. 244 IN A 119.75.218.77 |
Linux命令之dig命令挖出DNS的秘密的更多相关文章
- dig挖出DNS的秘密
[最简单的dig用法] 最简单的dig用法,当然就是直接输入dig按回车. 1 2 3 4 5 6 $ dig ; <<>> DiG 9.8.2rc1-RedHat-9.8 ...
- Linux命令之dig命令实例讲解
1.查看域名的A记录 # dig yahoo.com; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<> ...
- 关于nslookup以及dig命令的研究报告
我们在日常上网时都是用域名访问网路,如www.baidu.com,而在实际寻址过程中,是使用IP地址,如180.101.49.11,域名到IP地址的解析是通过DNS服务器来实现的,系统中我们可以用一些 ...
- Linux下dig命令使用
Dig简介: Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具.由于一直缺失Dig man page文档,本文就权当一个dig使用向导吧. Dig的 ...
- linux命令总结之dig命令
Dig简介: Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具.Dig的源码是ISC BIND大包的一部分,但是大多编译和安装Bind的文档都不把它包括在内 ...
- DNS系列—dig命令的使用
目录 如何安装dig dig常见用法 dig的基本语法 简单dig查询域名 指定DNS服务器查询 反查IP对应域名 如何安装dig dig是bind下面常见的工具,在linux系统上经常回用的一个dn ...
- Linux下解析域名命令-dig 命令使用详解
Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息.dig 命令主要用来从 DNS 域名服务器查询主机地址信息.dig的全称是 (dom ...
- 云服务器 ECS Linux 系统下使用 dig 命令查询域名解析
云服务器 ECS Linux 系统可以使用通常自带的 dig 命令来查询域名解析情况.本文对此进行简要说明. 查询域名 A 记录 命令格式: dig <域名> 比如,查询域名 www.al ...
- linux dig 命令使用
linux dig 命令使用方法 2018.04.20 15:47 43101浏览 dig 命令主要用来从 DNS 域名服务器查询主机地址信息. 查询单个域名的 DNS 信息 dig 命令最典型的 ...
随机推荐
- sz与rz命令
一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地: 与ssh ...
- Codeforces 585.D Lizard Era: Beginning
D. Lizard Era: Beginning time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- portal商品展示功能逻辑
看下接口: 返回值: 门户商品搜索功能的实现: 根据分类id进行搜索,根据关键词进行搜索,并按照一定的顺序排序 业务逻辑: 1.查询分类是否存在. 2.如果分类存在,则递归分类,展示父类商品,子类商品 ...
- 题解 P2472 【[SCOI2007]蜥蜴】
P2472 [SCOI2007]蜥蜴 题目背景 07四川省选 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱 ...
- (转)C++常见问题: 字符串分割函数 split
http://www.cnblogs.com/dfcao/p/cpp-FAQ-split.html C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速 ...
- windows下libcurl与zlib和ssl共同编译
下载了curl 7.37,在project里有各个版本VS对应的项目文件,我们选择合适的打开即可以编译,根据不同的项目配置输出想要的库,比如可以切换多种SSL库,dll/lib,debug/relea ...
- Bootstrap 文件上传插件 FileInput的使用问题
: 在使用bootstrap的文件上传插件fileinput http://plugins.krajee.com/file-input的预览功能时,删除预览图片在 bootstrap 模态框中没有用, ...
- Flex布局之box-flex
box-flex的写法比flex的写法要复杂一些,兼容性的前缀要多带几个,真希望有一天flex布局能够纳入w3c标准啊! <!DOCTYPE html> <html> < ...
- 怎样用javascript关闭本窗口
大家都知道window.close()是用来关闭窗口的,而且ie和firefox都是支持的. 为了实现用户对浏览器的绝对控制,ie中用close关闭非open打开的窗口时回弹出一个对话框询问用户,怎么 ...
- text-align: justify;不能均匀分布问题
本文地址:http://www.cnblogs.com/veinyin/p/7617610.html 对于text-align来说,一般我们都是使用居中这个属性值,突然今天需要达到这样一个效果: 对 ...