本原创文章属于《Linux大棚》博客。

博客地址为http://roclinux.cn。

文章作者为roc。

===

【初次见面】

我相信使用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支持从一个文件里读取内容进行批量查询,这个非常体贴和方便。文件的内容要求一行为一个查询请求。来个实际例子吧:

01

02

03

04

05

06

07

08

09

10

11

$ cat querylist //文件内容,共有两个域名需要查询

www.baidu.com

www.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.206

roclinux.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.com

www.a.shifen.com.

119.75.218.77

119.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      A

www.baidu.com.          260     IN      CNAME   www.a.shifen.com.

www.a.shifen.com.       244     IN      A       119.75.217.56

www.a.shifen.com.       244     IN      A       119.75.218.77

【我们还需要学习什么】

坚持看我的博客的同学,已经掌握了nslookup和dig两个DNS工具,我想,下一步你可以
自己搭建一套内部的DNS服务器了,自己设置master/slave服务器,自己添加Zone,
自己添加正解、反解,自己设置缓存超时等等,相信通过这一番折腾,
你对DNS会有不一样的理解和认识。

谢谢!

dig挖出DNS的秘密相关推荐

  1. 985高校挖出古墓!网友:毕业论文自己找上门来了

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文来源:整理自南方+.中国青年报.华商报.微博等 12月13日,中 ...

  2. Nchain旗下矿池挖出首个BCH区块,“算力战争”真的要来了?

    本周三,SV矿池挖出了首个BCH区块.该矿池的经营者是区块链公司Nchain和Coingeek,他们表示已经有来自世界各地的数百位矿工选择加入这个矿池. Bitcoin SV迈出了第一步 BCH网络升 ...

  3. 程序员你写的代码,被人挖出了黑产

    事件经过 看了微博上发表转发1000+ .点赞1000+次的吐槽陕西省的普通话成绩查询网站代码的微博,后来知乎上又有20万的阅读量这个话题的提问.最终结案这并不是真的陕西省普通话成绩查询网的网址,只不 ...

  4. 挖出一个面试刷题的宝藏资源,赶紧收下了~

    挖出一个面试题宝藏公众号,收集了大量的实用面试题,感觉很有用,这些题目分享给大家,需要的同学可以刷两遍 1-10期 [10期]Redis 面试常见问答 [09期]说说hashCode() 和 equa ...

  5. css圆角box(宽度自适应)(百度知道挖出)

    css圆角box(百度知道挖出) 1.css .zhidao_box {     position: relative;     width: 100%; } .zhidao_box .rg_1, . ...

  6. 职教云打卡可以补签吗_雁城“网红路”升级改造,部分红叶李已被挖出,以后还可以在此地打卡吗?...

    近日,有有网友询问:资阳城区大千路目前是在扩道还是改造?大千路是市民心中的"网红路",那里的红叶李会被移走吗? 带着市民的问题,记者赶往大千路了解情况."砰砰砰!&quo ...

  7. Abra CEO:PayPal满足的比特币购买需求比每天挖出的比特币数量更多

    加密货币钱包及交易应用Abra首席执行官Bill Barhydt发推表示,现在,PayPal(单独)满足的比特币购买需求比每天挖出的比特币数量更多.2021年(或22年)很可能会看到零售比特币ETF, ...

  8. 挖出api接口的重要性

    作为一名软件开发者,API是我们工作中不可或缺的一部分.无论是将不同系统连接起来,还是构建多组件应用程序,API都是我们的核心工具之一.在本文中,我们将深入讨论API的技术细节和实际应用. 一.首先, ...

  9. 通过Dig来学DNS

    转发自自己的公众号(灰子学技术): 通过Dig来学Dns DNS是网络里面很常用的服务,有一整套的设计 策略和方法,算是很成熟的技术了.作者本人最近刚好用到了DNS,便顺便整理的了笔记,希望对大家有些 ...

最新文章

  1. BiLSTM-CRF学习笔记(原理和理解) 维特比
  2. 算法(第四版)C# 习题题解——1.3
  3. 最新zendframework1.11使用
  4. Linux禁止普通用户su至root
  5. 【thymeleaf】data-*
  6. .NET中委托写法的演变(上):委托与匿名方法
  7. crontab 改成只读模式_以“三合一”模式推动提质增效 助力公司高质量发展
  8. C语言和设计模式(建造者模式)
  9. xendesktop更新计算机,XenApp / XenDesktop 7.6 初体验二 配置计算机目录和交付组
  10. 免费医学统计软件——医统无忧智能统计软件(两组间比较:两独立样本t检验、非参数检验和卡方检验)操作说明和结果解读
  11. android mapping文件作用,Android打包代码混淆后的Mapping文件路径
  12. 老板面试怎么谈?千万不要走近误区。
  13. 人大、北外、北航三校开启在职硕士(学位)商业数据分析方向 | 报名
  14. C# winform 魔兽MH全图制作教程(3):魔兽1.20E.1.24B.1.24E全图内存地址 转自breeze...
  15. MOBA移动游戏性能分析报告:渲染、UI和逻辑代码是性能头号杀手!
  16. docker相关的文件配置
  17. 极大似然估计四个步骤
  18. python ai自动剪辑视频_你知道吗?Python也可以剪辑视频!
  19. 【LAS 】 SRS 开启ATC功能 时间戳测试
  20. php 商品价格区间表,ThinkPHP框架,按分类,计算商品价格区间,来完成价格搜索...

热门文章

  1. 皮一皮:秀恩爱死的快啊!!!!
  2. 皮一皮:你有没有为中国大数据力量做一份贡献!
  3. 皮一皮:所以这也是大数据的一种?
  4. 想让进程后台运行,试试Linux的nohup命令,3分钟学会。
  5. 据说电脑上可以刷朋友圈啦!又多了个上班摸鱼的途径?
  6. 技术选型之Docker容器引擎
  7. 面试官:说说 Java 中的 Unsafe 和 CAS
  8. 前后端API交互如何保证数据安全性?
  9. 批处理ffmpeg将avi视频格式转换成mp4文件同时生成m3u8文件
  10. 七牛云上传文件之表单上传文件