我知道如何使用、等工具查询 DNS。dig
但host
它们的 macOS 手册页指出:
DNS 查询的结果也可能与使用 macOS DNS 路由库的查询不同。
鉴于此,如何在终端中查询 DNS 并获得与原生 macOS 应用程序相同的结果?
在测试 DNS 更改时,我有时会看到 unix 工具和原生 mac 应用程序之间的结果不同。以下是我遇到的一个例子:
$ dig +short example.com
192.168.0.100
dig 显示 DNS 查询返回由我们自己的 DNS 服务器处理的本地地址。同时,使用 macOS 的“网络实用程序”查找会返回缓存结果:
使用 macOS 网络可达性工具,我也得到了一个缓存结果(对于那些不熟悉输出的人来说,IP 地址显示在最后一行):
$ scutil -W -r example.com
0: direct
<SCNetworkReachability 0x7f8a39605ab0 [0x7fffa3c088f0]> {name = example.com}
Reachable
1: start
<SCNetworkReachability 0x7f8a39606000 [0x7fffa3c088f0]> {name = example.com}
2: on runloop
<SCNetworkReachability 0x7f8a39606000 [0x7fffa3c088f0]> {name = example.com (DNS query active), flags = 0x00000002, if_index = 13}
Reachable
*** 13:08:23.373
3: callback w/flags=0x00000002 (info="by name")
<SCNetworkReachability 0x7f8a39606000 [0x7fffa3c088f0]> {name = example.com (complete, 93.184.216.34, 2606:2800:220:1:248:1893:25c8:1946), flags = 0x00000002, if_index = 13}
Reachable
是否有 macOS 命令行实用程序可以使用与本机 mac 应用程序相同的启发式方法来解析地址?注意:我对清除 DNS 缓存不感兴趣,我感兴趣的是从脚本中使用本机 macOS DNS 解析器。我查看了mDNSResponder
、、、dns-sd
的手册页,但scutil
似乎都没有查询 DNS。networksetup
dscacheutil
答案1
似乎花了一些精力来表述问题,我更好地理解了问题,从而执行更精确的谷歌搜索并找到了答案。
在 macOS 上,查询 DNS 是通过以下方式实现的:
$ dscacheutil -q host -a name example.com
name: example.com
ipv6_address: 2606:2800:220:1:248:1893:25c8:1946
name: example.com
ip_address: 93.184.216.34
与大多数 macOS shell 命令一样,它不如 unix 等效命令那么好,但它能给我与原生 mac 应用程序一致的结果。
答案2
除了深入挖掘(双关语)dscacheutil
手册文档中未涵盖的用法之外,我想补充一点,macOs 名称解析系统的核心是 mDNSresponder 服务,它似乎正在收集通用接口下所有不同来源的查找信息。
与 mDNS 子系统交互的工具是dns-sd
,因此,还有另一种方式来查询符合所有可用解析器的 DNS 记录:
~ » dns-sd -G v4v6 google.com
DATE: ---Wed 04 Nov 2020---
19:05:47.081 ...STARTING...
Timestamp A/R Flags if Hostname Address TTL
19:05:47.175 Add 2 0 google.com. 2A00:1450:4001:081D:0000:0000:0000:200E%<0> 377
19:05:47.255 Add 2 0 google.com. 172.217.22.110 377
或者
~ » dns-sd -q google.com
DATE: ---Wed 04 Nov 2020---
20:27:50.834 ...STARTING...
Timestamp A/R Flags if Name Type Class Rdata
20:27:50.925 Add 2 0 google.com. Addr IN 172.217.22.110
甚至
~ » dns-sd -q google.com TXT
DATE: ---Wed 04 Nov 2020---
20:30:45.908 ...STARTING...
Timestamp A/R Flags if Name Type Class Rdata
20:30:48.831 Add 3 0 google.com. TXT IN 36 bytes: 23 76 3D 73 70 66 31 20 69 6E 63 6C 75 64 65 3A 5F 73 70 66 2E 67 6F 6F 67 6C 65 2E 63 6F 6D 20 7E 61 6C 6C
20:30:48.831 Add 3 0 google.com. TXT IN 46 bytes: 2D 64 6F 63 75 73 69 67 6E 3D 30 35 39 35 38 34 38 38 2D 34 37 35 32 2D 34 65 66 32 2D 39 35 65 62 2D 61 61 37 62 61 38 61 33 62 64 30 65
20:30:48.831 Add 3 0 google.com. TXT IN 46 bytes: 2D 64 6F 63 75 73 69 67 6E 3D 31 62 30 61 36 37 35 34 2D 34 39 62 31 2D 34 64 62 35 2D 38 35 34 30 2D 64 32 63 31 32 36 36 34 62 32 38 39
20:30:48.831 Add 3 0 google.com. TXT IN 60 bytes: 3B 66 61 63 65 62 6F 6F 6B 2D 64 6F 6D 61 69 6E 2D 76 65 72 69 66 69 63 61 74 69 6F 6E 3D 32 32 72 6D 35 35 31 63 75 34 6B 30 61 62 30 62 78 73 77 35 33 36 74 6C 64 73 34 68 39 35
20:30:48.831 Add 2 0 google.com. TXT IN 65 bytes: 40 67 6C 6F 62 61 6C 73 69 67 6E 2D 73 6D 69 6D 65 2D 64 76 3D 43 44 59 58 2B 58 46 48 55 77 32 77 6D 6C 36 2F 47 62 38 2B 35 39 42 73 48 33 31 4B 7A 55 72 36 63 31 6C 32 42 50 76 71 4B 58 38 3D
说实话,这不是编写脚本的最佳命令,因为它以交互式连续监控模式运行,会通知给定地址上的任何更改,直到有人中断它。虽然它可以实现一些有趣的功能,例如观察仅 VPN 路径消失然后在重新连接时重新出现:
~ » dns-sd -G v4v6 vpn.only.address.com
DATE: ---Wed 04 Nov 2020---
19:10:01.672 ...STARTING...
Timestamp A/R Flags if Hostname Address TTL
19:10:01.673 Add 40000002 0 vpn.only.address.com. 10.100.100.100 333
19:10:01.759 Add 2 0 vpn.only.address.com. 0000:0000:0000:0000:0000:0000:0000:0000%<0> 323 No Such Record
19:10:07.703 Rmv 0 0 vpn.only.address.com. 10.100.100.100 0
19:10:10.783 Add 2 0 vpn.only.address.com. 0.0.0.0 4502 No Such Record
19:10:10.905 Add 2 0 vpn.only.address.com. 0000:0000:0000:0000:0000:0000:0000:0000%<0> 4502 No Such Record
19:10:32.669 Add 3 0 vpn.only.address.com. 10.100.100.100 298
19:10:32.670 Add 2 0 vpn.only.address.com. 0000:0000:0000:0000:0000:0000:0000:0000%<0> 228 No Such Record
答案3
使用 BIND 的域名 Internet Grapher 工具。DiG。
挖www.域名.com麦克
挖www.域名.com纳秒
也可用于查询特定的名称服务器
挖www.域名.com一个@ns1.domain.com
相当简单的本机工具,您几乎可以在每台 UNIX 机器(包括 Mac OSX)上找到它。