假设我的主机文件中有一个 条目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
我希望它告诉我查找正在解析为hosts
forlocalhost
和我的 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/hosts
(files
令牌),然后才进行 DNS 查询(令牌dns
),再次使用以下内容resolv.conf
如果您想 100% 确定给定的应用程序,则需要在调用中运行它strace
。