使用dig命令挖掘域名解析信息

系统 Linux
命令行工具 dig 是用于解析域名和故障排查的一个利器。dig 向用户返回的内容可以非常详尽,也可以非常简洁,展现内容的多少完全由用户在查询时使用的选项来决定。

[[316321]]

命令行工具 dig 是用于解析域名和故障排查的一个利器。

从主要功能上来说,dignslookup 之间差异不大,但 dig 更像一个加强版的 nslookup,可以查询到一些由域名服务器管理的信息,这在排查某些问题的时候非常有用。总的来说,dig 是一个既简单易用又功能强大的命令行工具。(LCTT 译注:dignslookup 行为的主要区别来自于 dig 使用是是操作系统本身的解析库,而 nslookup 使用的是该程序自带的解析库,这有时候会带来一些行为差异。此外,从表现形式上看,dig 返回是结果是以 BIND 配置信息的格式返回的,也带有更多的技术细节。)

dig 最基本的功能就是查询域名信息,因此它的名称实际上是“域名信息查询工具Domain Information Groper”的缩写。dig 向用户返回的内容可以非常详尽,也可以非常简洁,展现内容的多少完全由用户在查询时使用的选项来决定。

我只需要查询 IP 地址

如果只需要查询某个域名指向的 IP 地址,可以使用 +short 选项:

  1. $ dig facebook.com +short
  2. 31.13.66.35

在查询的时候发现有的域名会指向多个 IP 地址?这其实是网站提高其可用性的一种措施。

  1. $ dig networkworld.com +short
  2. 151.101.2.165
  3. 151.101.66.165
  4. 151.101.130.165
  5. 151.101.194.165

也正是由于这些网站通过负载均衡实现高可用,在下一次查询的时候,或许会发现这几个 IP 地址的排序有所不同。(LCTT 译注:浏览器等应用默认会使用返回的第一个 IP 地址,因此这样实现了一种简单的负载均衡。)

  1. $ dig networkworld.com +short
  2. 151.101.130.165
  3. 151.101.194.165
  4. 151.101.2.165
  5. 151.101.66.165

标准返回

dig 的标准返回内容则包括这个工具本身的一些信息,以及请求域名服务器时返回的响应内容:

  1. $ dig networkworld.com
  2.  
  3. ; <<>> DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu <<>*gt; networkworld.com
  4. ;; global options: +cmd
  5. ;; Got answer:
  6. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39932
  7. ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
  8.  
  9. ;; OPT PSEUDOSECTION:
  10. ; EDNS: version: 0, flags:; udp: 65494
  11. ;; QUESTION SECTION:
  12. ;networkworld.com. IN A
  13.  
  14. ;; ANSWER SECTION:
  15. networkworld.com. 300 IN A 151.101.194.165
  16. networkworld.com. 300 IN A 151.101.130.165
  17. networkworld.com. 300 IN A 151.101.66.165
  18. networkworld.com. 300 IN A 151.101.2.165
  19.  
  20. ;; Query time: 108 msec
  21. ;; SERVER: 127.0.0.53#53(127.0.0.53)
  22. ;; WHEN: Thu Feb 13 13:49:53 EST 2020
  23. ;; MSG SIZE rcvd: 109

由于域名服务器有缓存机制,返回的内容可能是之前缓存好的信息。在这种情况下,dig 最后显示的查询时间Query time会是 0 毫秒(0 msec):

  1. ;; Query time: 0 msec <==
  2. ;; SERVER: 127.0.0.53#53(127.0.0.53)
  3. ;; WHEN: Thu Feb 13 15:30:09 EST 2020
  4. ;; MSG SIZE rcvd: 109

向谁查询?

在默认情况下,dig 会根据 /etc/resolv.conf 这个文件的内容决定向哪个域名服务器获取查询结果。你也可以使用 @ 来指定 dig 请求的域名服务器。

在下面的例子中,就指定了 dig 向 Google 的域名服务器 8.8.8.8 查询域名信息。

  1. $ dig @8.8.8.8 networkworld.com
  2.  
  3. ; <<>> DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu <<>> @8.8.8.8 networkworld.com
  4. ; (1 server found)
  5. ;; global options: +cmd
  6. ;; Got answer:
  7. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21163
  8. ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
  9.  
  10. ;; OPT PSEUDOSECTION:
  11. ; EDNS: version: 0, flags:; udp: 512
  12. ;; QUESTION SECTION:
  13. ;networkworld.com. IN A
  14.  
  15. ;; ANSWER SECTION:
  16. networkworld.com. 299 IN A 151.101.130.165
  17. networkworld.com. 299 IN A 151.101.66.165
  18. networkworld.com. 299 IN A 151.101.194.165
  19. networkworld.com. 299 IN A 151.101.2.165
  20.  
  21. ;; Query time: 48 msec
  22. ;; SERVER: 8.8.8.8#53(8.8.8.8)
  23. ;; WHEN: Thu Feb 13 14:26:14 EST 2020
  24. ;; MSG SIZE rcvd: 109

想要知道正在使用的 dig 工具的版本,可以使用 -v 选项。你会看到类似这样:

  1. $ dig -v
  2. DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu

或者这样的返回信息:

  1. $ dig -v
  2. DiG 9.11.4-P2-RedHat-9.11.4-22.P2.el8

如果你觉得 dig 返回的内容过于详细,可以使用 +noall(不显示所有内容)和 +answer(仅显示域名服务器的响应内容)选项,域名服务器的详细信息就会被忽略,只保留域名解析结果。

  1. $ dig networkworld.com +noall +answer
  2.  
  3. ; <<>> DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu <<>> networkworld.com +noall +answer
  4. ;; global options: +cmd
  5. networkworld.com. 300 IN A 151.101.194.165
  6. networkworld.com. 300 IN A 151.101.130.165
  7. networkworld.com. 300 IN A 151.101.66.165
  8. networkworld.com. 300 IN A 151.101.2.165

批量查询域名

如果你要查询多个域名,可以把这些域名写入到一个文件内(domains),然后使用下面的 dig 命令遍历整个文件并给出所有查询结果。

  1. $ dig +noall +answer -f domains
  2. networkworld.com. 300 IN A 151.101.66.165
  3. networkworld.com. 300 IN A 151.101.2.165
  4. networkworld.com. 300 IN A 151.101.130.165
  5. networkworld.com. 300 IN A 151.101.194.165
  6. world.std.com. 77972 IN A 192.74.137.5
  7. uushenandoah.org. 1982 IN A 162.241.24.209
  8. amazon.com. 18 IN A 176.32.103.205
  9. amazon.com. 18 IN A 176.32.98.166
  10. amazon.com. 18 IN A 205.251.242.103

你也可以在上面的命令中使用 +short 选项,但如果其中有些域名指向多个 IP 地址,就无法看出哪些 IP 地址对应哪个域名了。在这种情况下,更好地做法应该是让 awk 对返回内容进行处理,只留下第一列和最后一列:

  1. $ dig +noall +answer -f domains | awk '{print $1,$NF}'
  2. networkworld.com. 151.101.66.165
  3. networkworld.com. 151.101.130.165
  4. networkworld.com. 151.101.194.165
  5. networkworld.com. 151.101.2.165
  6. world.std.com. 192.74.137.5
  7. amazon.com. 176.32.98.166
  8. amazon.com. 205.251.242.103
  9. amazon.com. 176.32.103.205

 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2023-10-31 08:10:24

域名域名解析服务器

2023-03-09 08:12:08

免登录实Python脚本

2021-06-28 08:26:29

CoreDNS域名

2010-05-24 15:35:58

IPv6域名解析

2021-04-29 21:43:41

Dig命令迭代

2017-12-22 10:48:41

邮件服务器PTR

2023-11-27 22:55:17

DNS域名解析

2018-03-29 09:46:02

2011-05-31 16:55:43

2019-10-30 05:32:17

网址URLIP地址

2019-12-11 10:42:10

Linuxdignslookup

2021-11-12 09:35:33

网址URLLinux

2015-12-07 14:11:01

2019-03-18 10:44:41

负载均衡DNSUDP

2010-12-22 11:01:00

绿盟科技网站域名解析监测

2021-12-06 10:21:50

LinuxDNS 查询

2013-08-15 16:35:16

DNSPod域名解析

2013-04-23 11:41:08

2013-04-18 15:26:41

域名

2013-04-19 14:41:29

域名解析
点赞
收藏

51CTO技术栈公众号