dig挖出DNS的秘密
【最简单的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支持从一个文件里读取内容进行批量查询,这个非常体贴和方便。文件的内容要求一行为一个查询请求。来个实际例子吧:
|
01
02
03
04
05
06
07
08
09
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会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来。
|
01
02
03
04
05
06
07
08
09
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 |
【我们还需要学习什么】
坚持看我的博客的同学,已经掌握了nslookup和dig两个DNS工具,我想,下一步你可以
自己搭建一套内部的DNS服务器了,自己设置master/slave服务器,自己添加Zone,
自己添加正解、反解,自己设置缓存超时等等,相信通过这一番折腾,
你对DNS会有不一样的理解和认识。
dig挖出DNS的秘密的更多相关文章
- Linux命令之dig命令挖出DNS的秘密
=== [初次见面] 我相信使用nslookup的同学一定比使用dig的同学多,所以还是有必要花些时间给大家介绍一下dig的. dig,和nslookup作用有些类似,都是DNS查询工具. dig,其 ...
- DiG HOWTO How to use dig to query DNS name servers.
Contents Introduction Understanding the default output What can I discover? How do I … Get a short a ...
- 一步一步挖出Compute
前几天在做结账的时候,对数据表DataGridView控件的单列求和纠结了一番. 如今差点儿养成了习惯,对于一些东西疏于開始的思考,不会先想到百度,这里我是先想到了第一版的机房收费那块的 ...
- DNS相关知识
1 DNS解析过程详解 2 DNS原理总结及其解析过程详解 3 DNS原理及其解析过程[精彩剖析] 4 DNS域名解析原理 5 dig挖出DNS的秘密 6 nslookup通往DNS的桥梁 7 DNS ...
- Domain Name System (DNS)
1.DNS和WINS的作用 DNS:(Domain Name Server,域名服务)用于实现域名和IP地址的相互转换. WINS:(Windows Internet Name Service) 用来 ...
- 工作中常用的 Linux 命令
awk 示例: env变量值如下,需要获得pkg_url的链接值: {"name": "michael", "sex": "mal ...
- 使用dig查询dns解析
原文地址:使用dig查询dns解析 作者:chenwenming 一般来说linux下查询域名解析有两种选择,nslookup或者dig,而在使用上我觉得dig更加方便顺手. 如果是在debian下的 ...
- DNS信息收集工具dig使用
Dig是域信息搜索器的简称(Domain Information Groper),使用dig命令可以执行查询域名相关的任务 常见域名记录: A(主机记录 把一个域名解析成IP地址) C name(别名 ...
- 10 Linux DIG Command Examples for DNS Lookup--reference
by RAMESH NATARAJAN on FEBRUARY 29, 2012 http://www.thegeekstuff.com/2012/02/dig-command-examples/ D ...
随机推荐
- Dede 删除文档同时文章中的图片的方法
首先,在"/include"目录下建立"extend.func.php"文件. 然后,将以下内容保存在"extend.func.php"文件 ...
- 织梦dedecmsV5.7联动类型无法显示的处理方法
最近织梦dedecms在新的功能中添加了一个联动类型这样的一个功能.所谓的联动类型,类似于一级目录下有二级目录,二级目录下又有三级目录,可以理解为数据结构中树形结构.级和级之间都是有着联系的.为了让大 ...
- ios - 如何获取app上的数据
做过ios开发的人应该都用过Charles,通常叫它花瓶.Charles是Mac下常用的对网络流量进行分析的工具,类似于Windows下的Fiddler.在开发iOS程序的时候,往往需要调试客户端和服 ...
- 跟我一起读postgresql源码(十四)——Executor(查询执行模块之——Join节点(下))
3.HashJoin 节点 postgres=# explain select a.*,b.* from test_dm a join test_dm2 b on a.xxx = b.xxx; QUE ...
- mybatis实战教程一:开发环境搭建
步骤一: 创建一个maven工程,在pom文件中加载依赖 <dependencies> <dependency> <groupId>org.mybatis</ ...
- 网站静态化处理—web前端优化—上(11)
网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属 ...
- pulltorefresh 设置刷新文字提示颜色
xmlns:ptr="http://schemas.android.com/apk/res-auto" 赵泽民 2016/7/12 15:48:58 ptr:ptrHeaderS ...
- 【转】用Linux命令行获取本机外网IP地址
$ curl ifconfig.me $ curl icanhazip.com $ curl ident.me $ curl ipecho.net/plain $ curl whatismyip.ak ...
- Redis的部署
笔者Q:972581034 交流群:605799367 欢迎加群交流 官方网站 redis.io 下载 cd /usr/local/src wget http://download.redis.io/ ...
- iOS9 适配网络请求,适配分享失败,适配无法正常跳转到客户端
问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据.对ShareSDK来说,具体表现可能是,无法授权.分享.获取用户信息等. 还可能造成我们的编辑界面里 ...