首页 > 学院 > 系统知识 > 正文

教你怎么使用 dig?

2022-07-09 12:57:44
字体:
来源:转载
供稿:网友
当我第一次使用 dig 时,我发现它有点吓人 —— 有这么多的选项!我打算把大部分的选项省略。在这篇文章中,我打算不谈 dig 的大部分选项,只谈我实际使用的选项。
 
我最近还了解到,你可以设置一个 .digrc 配置文件,让它的输出更容易阅读,这让它的使用变得更加轻松。
 
几年前我还画了一个关于 dig 的 zine 页,但我想写这篇文章来包括更多的信息。
 
两种类型的 dig 参数:查询和格式化
有两种主要的参数可以传递给 dig:
 
告诉 dig 要进行什么 DNS 查询的参数。
告诉 dig 如何 格式化响应的参数。
首先,让我们看一下查询选项。
 
主要的查询选项
你通常想控制 DNS 查询的 3 件事是:
 
名称(如 jvns.ca)。默认情况下,查询的是空名称(.)。
DNS 查询类型(如 A 或 CNAME)。默认是 A。
发送查询的 服务器(如 8.8.8.8)。默认是 /etc/resolv.conf 中的内容。
其格式是:
 
dig @server name type
这里有几个例子:
 
dig @8.8.8.8 jvns.ca 向谷歌的公共 DNS 服务器(8.8.8.8)查询 jvns.ca。
dig ns jvns.ca 对 jvns.ca 进行类型为 NS 的查询。
-x:进行反向 DNS 查询
我偶尔使用的另一个查询选项是 -x,用于进行反向 DNS 查询。下面是输出结果的样子。
 
$ dig -x 172.217.13.174
174.13.217.172.in-addr.arpa. 72888 IN PTR yul03s04-in-f14.1e100.net。
-x 不是魔术。dig -x 172.217.13.174 只是对 174.13.217.172.in-addr.arpa. 做了一个 PTR 查询。下面是如何在不使用 `-x’ 的情况下进行完全相同的反向 DNS 查询。
 
$ dig ptr 174.13.217.172.in-addr.arpa.
174.13.217.172.in-addr.arpa. 72888 IN PTR yul03s04-in-f14.1e100.net。
我总是使用 -x,因为它可以减少输入。
 
格式化响应的选项
现在,让我们讨论一下你可以用来格式化响应的参数。
 
我发现 dig 默认格式化 DNS 响应的方式对初学者来说是很难接受的。下面是输出结果的样子:
 
; <<>> DiG 9.16.20 <<>> -r jvns.ca
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28629
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: d87fc3022c0604d60100000061ab74857110b908b274494d (good)
;; QUESTION SECTION:
;jvns.ca.           IN  A
 
;; ANSWER SECTION:
jvns.ca.        276 IN  A   172.64.80.1
 
;; Query time: 9 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sat Dec 04 09:00:37 EST 2021
;; MSG SIZE  rcvd: 80
如果你不习惯看这个,你可能需要花点时间来筛选,找到你要找的 IP 地址。而且大多数时候,你只对这个响应中的一行感兴趣(jvns.ca. 180 IN A 172.64.80.1)。
 
下面是我最喜欢的两种方法,可以使 dig 的输出更容易管理:
 
方式 1 : +noall +answer
这告诉 dig 只打印 DNS 响应中的“答案”部分的内容。下面是一个查询 google.com 的 NS 记录的例子:
 
$ dig +noall +answer ns google.com
google.com.     158564  IN  NS  ns4.google.com.
google.com.     158564  IN  NS  ns1.google.com.
google.com.     158564  IN  NS  ns2.google.com.
google.com.     158564  IN  NS  ns3.google.com.
这里的格式是:
 
NAME         TTL            TYPE   CONTENT
google.com   158564   IN    NS     ns3.google.com.
顺便说一下:如果你曾经想知道 IN 是什么意思,它是指“查询类”,代表“互联网internet”。它基本上只是上世纪 80、90 年代的遗物,当时还有其他网络与互联网竞争,如“混沌网络chaosnet”。
 
方式 2:+short
这就像 dig +noall +answer,但更短:它只显示每条记录的内容。比如说:
 
$ dig +short ns google.com
ns2.google.com.
ns1.google.com.
ns4.google.com.
ns3.google.com.
你可以在 digrc 中设置格式化选项
如果你不喜欢 dig 的默认格式(我就不喜欢!),你可以在你的主目录下创建一个 .digrc 文件,告诉它默认使用不同的格式。
 
我非常喜欢 +noall +answer 格式,所以我把 +noall +answer 放在我的 ~/.digrc 中。下面是我使用该配置文件运行 dig jvns.ca 时的情况。
 
$ dig jvns.ca
jvns.ca.        255在172.64.80.1中
这样读起来就容易多了!
 
如果我想回到所有输出的长格式(我有时会这样做,通常是因为我想看响应的权威部分的记录),我可以通过运行再次得到一个长答案。
 
$ dig +all jvns.ca
dig +trace
我使用的最后一个 dig 选项是 +trace。dig +trace 模仿 DNS 解析器在查找域名时的做法 —— 它从根域名服务器开始,然后查询下一级域名服务器(如 .com),以此类推,直到到达该域名的权威域名服务器。因此,它将进行大约 30 次 DNS 查询。(我用 tcpdump 检查了一下,对于每个根域名服务器的 A / AAAA 记录它似乎要进行 2 次查询,所以这已经是 26 次查询了。我不太清楚它为什么这样做,因为它应该已经有了这些 IP 的硬编码,但它确实如此。)
 
我发现这对了解 DNS 的工作原理很有用,但我不认为我用它解决过问题。

(编辑:错新网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表