【Linux】命令 - dig

Posted by 西维蜀黍 on 2019-01-30, Last Modified on 2022-12-10

dig命令

dig(域信息搜索器)命令是一个用于询问 DNS 域名服务器的灵活的工具。它执行 DNS 查询,显示从已查询名称服务器返回的应答。多数 DNS 管理员使用 dig 命令 来诊断 DNS 问题,因为它灵活性好、容易使用、输出清晰。

除非被告知查询特定名称服务器,否则 dig 命令将尝试查询 /etc/resolv.conf 文件中列示的每个服务器。如果未指定任何命令行参数或选项,那么 dig 命令会对“.”(根目录)执行 NS 查询。

例子

$ dig www.weibo.com

; <<>> DiG 9.10.6 <<>> www.weibo.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28600
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 6, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.weibo.com.			IN	A

;; ANSWER SECTION:
www.weibo.com.		180	IN	A	180.149.134.142
www.weibo.com.		180	IN	A	180.149.138.56
www.weibo.com.		180	IN	A	180.149.134.141

;; AUTHORITY SECTION:
weibo.com.		62175	IN	NS	ns4.sina.com.cn.
weibo.com.		62175	IN	NS	ns4.sina.com.
weibo.com.		62175	IN	NS	ns3.sina.com.
weibo.com.		62175	IN	NS	ns1.sina.com.cn.
weibo.com.		62175	IN	NS	ns3.sina.com.cn.
weibo.com.		62175	IN	NS	ns2.sina.com.cn.

;; Query time: 18 msec
;; SERVER: 192.168.16.1#53(192.168.16.1)
;; WHEN: Wed Jan 30 18:04:44 CST 2019
;; MSG SIZE  rcvd: 214

分析

  • status: NOERROR 表示查询没有什么错误,Query time 表示查询完成时间。
  • SERVER: 192.168.16.1#53(192.168.16.1)表示完成查询的DNS服务器地址和端口号。
  • QUESTION SECTION 表示需要查询的内容。
  • ANSWER SECTION 表示查询结果,返回 A 记录的 IP 地址。180 表示本次查询缓存时间,在 180 秒本地 DNS 服务器可以直接从缓存返回结果。
  • AUTHORITY SECTION 表示从哪台 DNS 服务器获取到具体的 A 记录信息。因为,本地 DNS 服务器只是查询,而 AUTHORITY SECTION 返回的服务器是权威 DNS 服务器,由它来维护 www.weibo.com 的域名信息。返回的 DNS 记录类型是 NS,对应的名称是 ns4.sina.com.cn,ns4.sina.com等等。

指定DNS解析服务器

通过@DNS服务器,可以指定向特定DNS服务器查询,比如

$ dig @114.114.114.114 www.weibo.com

; <<>> DiG 9.10.6 <<>> @114.114.114.114 www.weibo.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46369
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.weibo.com.			IN	A

;; ANSWER SECTION:
www.weibo.com.		42	IN	A	180.149.134.142
www.weibo.com.		42	IN	A	180.149.134.141
www.weibo.com.		42	IN	A	180.149.138.56

;; Query time: 42 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Wed Jan 30 17:53:16 CST 2019
;; MSG SIZE  rcvd: 90

查询指定类型

常见 DNS 记录的类型

类型 目的
A 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录。
AAAA 用来指定主机名(或域名)对应的 IPv6 地址记录。
CNAME 如果需要将域名指向另一个域名,再由另一个域名提供 ip 地址,就需要添加 CNAME 记录。
MX 如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录。
NS 域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。
SOA SOA 这种记录是所有区域性文件中的强制性记录。它必须是一个文件中的第一个记录。
TXT 可以写任何东西,长度限制为 255。绝大多数的 TXT记录是用来做 SPF 记录(反垃圾邮件)。

ANY、A、MX、SIG,以及任何有效查询类型等。如果不提供任何类型参数,dig 将对纪录 A 执行查询。

$ dig www.weibo.com ANY

; <<>> DiG 9.10.6 <<>> www.weibo.com ANY
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11051
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.weibo.com.			IN	ANY

;; ANSWER SECTION:
www.weibo.com.		191	IN	A	180.149.134.141
www.weibo.com.		191	IN	A	180.149.134.142
www.weibo.com.		191	IN	A	180.149.138.56

;; Query time: 24 msec
;; SERVER: 192.168.16.1#53(192.168.16.1)
;; WHEN: Wed Jan 30 17:59:32 CST 2019
;; MSG SIZE  rcvd: 90

指定服务端口

默认请求的是它的53端口,我们还可以通过-p指定特定的DNS查询端口。

比如:

我们希望向192.168.16.1的5353端口请求DNS服务(而不是向默认的192.168.16.1的53端口)。

$ dig @192.168.16.1 -p 5353 www.google.com

; <<>> DiG 9.10.6 <<>> @192.168.16.1 -p 5353 www.google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 240
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.google.com.			IN	A

;; ANSWER SECTION:
www.google.com.		278	IN	A	216.58.197.100

;; Query time: 52 msec
;; SERVER: 192.168.16.1#5353(192.168.16.1)
;; WHEN: Wed Jan 30 17:56:15 CST 2019
;; MSG SIZE  rcvd: 59

跟踪整个查询过程

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

$ dig www.weibo.com +trace

; <<>> DiG 9.10.6 <<>> www.weibo.com +trace
;; global options: +cmd
.			59443	IN	NS	f.root-servers.net.
.			59443	IN	NS	g.root-servers.net.
.			59443	IN	NS	h.root-servers.net.
.			59443	IN	NS	i.root-servers.net.
.			59443	IN	NS	j.root-servers.net.
.			59443	IN	NS	k.root-servers.net.
.			59443	IN	NS	l.root-servers.net.
.			59443	IN	NS	m.root-servers.net.
.			59443	IN	NS	a.root-servers.net.
.			59443	IN	NS	b.root-servers.net.
.			59443	IN	NS	c.root-servers.net.
.			59443	IN	NS	d.root-servers.net.
.			59443	IN	NS	e.root-servers.net.
;; Received 1097 bytes from 192.168.16.1#53(192.168.16.1) in 17 ms

com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			172800	IN	NS	e.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.
com.			172800	IN	NS	l.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
;; Received 1176 bytes from 192.5.5.241#53(f.root-servers.net) in 46 ms

weibo.com.		172800	IN	NS	ns1.sina.com.cn.
weibo.com.		172800	IN	NS	ns2.sina.com.cn.
weibo.com.		172800	IN	NS	ns3.sina.com.cn.
weibo.com.		172800	IN	NS	ns4.sina.com.cn.
weibo.com.		172800	IN	NS	ns4.sina.com.
weibo.com.		172800	IN	NS	ns3.sina.com.
;; Received 683 bytes from 192.54.112.30#53(h.gtld-servers.net) in 217 ms

www.weibo.com.		60	IN	A	180.149.134.142
www.weibo.com.		60	IN	A	180.149.138.56
www.weibo.com.		60	IN	A	180.149.134.141
weibo.com.		86400	IN	NS	ns3.sina.com.cn.
weibo.com.		86400	IN	NS	ns2.sina.com.cn.
weibo.com.		86400	IN	NS	ns3.sina.com.
weibo.com.		86400	IN	NS	ns1.sina.com.cn.
weibo.com.		86400	IN	NS	ns4.sina.com.cn.
weibo.com.		86400	IN	NS	ns4.sina.com.
;; Received 310 bytes from 123.125.29.99#53(ns4.sina.com) in 51 ms

Reference