原文地址:

https://www.imooc.com/article/26971?block_id=tuijian_wz

作者:ibeautiful
来源:慕课网

----------------------------------------------------------------------------------------------------

dig 命令主要用来从 DNS 域名服务器查询主机地址信息。

查询单个域名的 DNS 信息

dig 命令最典型的用法就是查询单个主机的信息。


$ dig baidu.com

 dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。

  • 第一部分显示 dig 命令的版本和输入的参数。
  • 第二部分显示服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。
  • 第三部分中的 "QUESTION SECTION" 显示我们要查询的域名。
  • 第四部分的 "ANSWER SECTION" 是查询到的结果。
  • 第五部分则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。
默认情况下 dig 命令查询 A 记录,上图中显示的 A 即说明查询的记录类型为 A 记录。在尝试查询其它类型的记录前让我们先来了解一下常见的 DNS 记录类型

常见 DNS 记录的类型

查询 CNAME 类型的记录

除了 A 记录,常见的 DNS 记录还有 CNAME,我们可以在查询时指定要查询的 DNS 记录类型:

$ dig abc.filterinto.com CNAME

这样结果中就只有 CNAME 的记录。其实我们可以在查询中指定任何 DNS 记录的类型。

从指定的 DNS 服务器上查询

由于一些原因,希望从指定的 DNS 服务器上进行查询(从默认的 DNS 服务器上获得的结果可能不准确)。指定 DNS 服务器的方式为使用 @ 符号:
$ dig @8.8.8.8 abc.filterinto.com

从上图可以看到本次查询的 DNS 服务器为 8.8.8.8。

如果不指定 DNS 服务器,dig 会依次使用 /etc/resolv.conf 里的地址作为 DNS 服务器:

$ dig abc.filterinto.com

上面查询的 DNS 服务器就变成了:

反向查询

在前面的查询中我们指定了查询服务器为 8.8.8.8,这是谁家的 DNS 服务器?其实我们可以使用 dig 的 -x 选项来反向解析 IP 地址对应的域名
$ dig -x 8.8.8.8 +short

好吧,应该是谷歌家的,可以放心使用了。

控制显示结果

dig 命令默认返回的结果展示详细的信息,如果要获得精简的结果可以使用 +short 选项:
$ dig +short abc.filterinto.com

这下显示的结果就清爽多了。

其实我们还可以通过更多选项来控制输出的内容,比如只想显示 "ANSWER SECTION" 的内容:

$ dig abc.filterinto.com +nocomments +noquestion +noauthority +noadditional +nostats

这个结果很不错,就是使用的选项太多了(dig 命令有很多这样的选项,详情请参考使用手册)。我们可以换一种优雅一些的方式来实现和上面相同的结果:
$ dig abc.filterinto.com +noall +answer

查看 TTL(Time to Live)

TTL 是 DNS 解析中很重要的指标,主要是控制 DNS 记录在 DNS 服务器上的缓存时间:
$ dig abc.filterinto.com

查询结果中的单位是秒。通过下面的命令可以显示精简一些测结果:

$ dig +nocmd +noall +answer +ttlid abc.filterinto.com


跟踪整个查询过程

如果你好奇 dig 命令执行查询时都经历了哪些过程,你可以尝试使用 +trace 选项。它会输出从根域到最终结果的所有信息:
$ dig +trace abc.filterinto.com

上图中显示的并不是一个完整的结果,感兴趣的朋友可以自己尝试。

总结

dig 是一个很给力 DNS 查询工具,本文仅介绍了其常见用法,更多的命令选项及使用方法请查看 man page。

最新文章

  1. UWP Composition API - PullToRefresh
  2. 每天一个linux命令(43):lsof命令
  3. POJ 1095 Trees Made to Order(卡特兰数列)
  4. 关于Reapter多重嵌套的详细补充
  5. XAF应用开发教程(四)应用程序模型
  6. C# 通过线程来控制进度条(转)--讲解多线程对界面的操作
  7. xcode 插件管理工具
  8. [转]Gridview中实现RadioButton单选效果
  9. DevExpress z
  10. RTC 之 ARM7 2136 ARM9之2410
  11. NSnotificationCenter 正确使用姿势, removeObject 探索
  12. spark中各种连接操作以及有用方法
  13. js 上一天、下一天
  14. Java笔记:与系统交互、系统相关的类,Object类
  15. Myeclipse安装jbpm6
  16. KBEngine简单RPG-Demo源码解析(3)
  17. 【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher
  18. mysql的主主复制详解
  19. Managing Images on smartos
  20. GBDT+LR simple例子

热门文章

  1. 51nod 1305 Pairwise Sum and Divide
  2. 《The One!团队》第八次作业:ALPHA冲刺(一)
  3. SpringBoot官方文档学习(一)SpringApplication
  4. Tensorflow细节-P174-真正的图像预处理
  5. git submodule 使用小结
  6. HiveQL Index 索引
  7. override关键字
  8. AttributeError: module 'tensorflow' has no attribute 'set_random_seed'
  9. Mujin Programming Challenge 2017题解
  10. AtCoder Grand Contest 007题解