在 windows 和 linux 系统中,有一个很基本的域名解析工具叫 nslookup,但相对而言 dig 的功能和返回的信息要强大得多。在这里下载 bind,就可以获得 dig 工具了。你们看一下Dig 的 Man Page就会发现这货的参数多得吓人,我们只挑一些可能常用的讲解。首先讲一下 Dig 命令的基本使用格式:
例如我们要通过 Google DNS 来查 facebook.com 的 IPV6 地址 (AAAA 记录) 就是这样的:
返回的信息是这样的:
所有以分号 “;” 开始的内容都是 dig 命令对获取到的原始返回信息的注释部分,没有注释的部分才是我们真正要查询的内容。
这里解释部分内容:
• status:NOERROR 这是 DNS 返回的信息中 Reply Code 部分,用于告知客户端,DNS 服务器这次进行的查询是否成功还是有错误发生
• id:702 这个就是 DNS 查询和返回信息中的 Transaction ID,因为 UDP 协议不是按顺序到达的,所以这个 ID 用于把查询和返回信息配对
• flags:qr rd ra 这个是 DNS 返回信息中的 Flag 部分,QR 表示这是一个返回响应包 (对应查询包),rd表示客户端请求进行递归查询,ra 表示服务器支持递归查询
• QUERY:1 表示收到一个查询
• ANSWER: 表示回应了一个答复
• AUTHORITY:0 表示没有从域名的权威名称服务器查询数据,可能因为 DNS 缓存中已经有这个记录了,就不需要查询了
• ADDITIONAL:1 表示有一条额外的信息,一般是域名的权威名称服务器的地址
• 中间就是查询的内容和回复的内容了,应该很好理解
• 最后是整个查询过程的耗时,以及原始信息有多少个字节
除了这种基本的查询,dig 有很多选项可以用,常用的有:
• +short 表示不显示所有注释部分的代码,只显示要查询的数据,这个选项可以用在脚本里给其他命令提供域名的 IP
• +vc 表示用 TCP 方式查询,而不是用 UDP 方式,TCP 模式查询受到 GFW 劫持的影响非常小 (不是没有,只是范围很小)
• +dnssec 表示查询域名的 DNSSEC 签名信息,关于 DNSSEC 会在后面讲解
• +trace 表示禁止服务器用递归方式查询,一般来说就是让 DNS 返回根域服务器的地址,然后客户端自己去做迭代查询,后面的查询和 DNS 服务器不再有关系,只取决于客户端和各级名称服务器之间的网络。
关于 dig +trace 可能是我们实际调试中用到最多的命令了