如何确定正在应答 DNS 解析调用的内容是什么?

如何确定正在应答 DNS 解析调用的内容是什么?

假设我的主机文件中有一个 条目foobar,我如何查明该文件是否已使用或者远程 DNS 是否正在回答 的解析foobar

任何基本实用程序都会返回该信息吗?

dig +trace没有告诉我我想知道的内容

dig +trace localhost

; <<>> DiG 9.10.3-P4-Ubuntu <<>> +trace localhost
;; global options: +cmd
;; Received 28 bytes from 127.0.0.53#53(127.0.0.53) in 0 ms

dig +trace google.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> +trace google.com
;; global options: +cmd
;; Received 28 bytes from 127.0.0.53#53(127.0.0.53) in 0 ms

我希望它告诉我查找正在解析为hostsforlocalhost和我的 dns 服务器(无论哪一个) for google.com。如果我使用内部调用getaddrinfo(3)解析时是否命中主机文件或上游 dns 服务器localhost

答案1

dig是一个 DNS 故障排除工具:您可以明确指定要查询的 DNS 服务器,如果没有,它将使用您的resolv.conf.正如其文档中所写:

除非被告知要查询特定的名称服务器,否则 dig 将尝试 /etc/resolv.conf 中列出的每个服务器。如果没有找到可用的服务器地址,dig 会将查询发送到本地主机。

对于系统上需要进行 DNS 解析的任何其他应用程序,这将受到/etc/nsswitch.conf列出要查询以解析主机名的信息源的控制,例如:

主机:文件 myhostname mdns4_minimal [NOTFOUND=return] dns mdns4

例如,它显示将glibc首先查看/etc/hostsfiles令牌),然后才进行 DNS 查询(令牌dns),再次使用以下内容resolv.conf

如果您想 100% 确定给定的应用程序,则需要在调用中运行它strace

相关内容