如何从终端查询 macOS DNS 解析器?

如何从终端查询 macOS DNS 解析器?

我知道如何使用、等工具查询 DNS。dighost它们的 macOS 手册页指出:

DNS 查询的结果也可能与使用 macOS DNS 路由库的查询不同。

鉴于此,如何在终端中查询 DNS 并获得与原生 macOS 应用程序相同的结果?

在测试 DNS 更改时,我有时会看到 unix 工具和原生 mac 应用程序之间的结果不同。以下是我遇到的一个例子:

$ dig +short example.com
192.168.0.100

dig 显示 DNS 查询返回由我们自己的 DNS 服务器处理的本地地址。同时,使用 macOS 的“网络实用程序”查找会返回缓存结果:

网络实用程序查找显示缓存的 IP 地址

使用 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。networksetupdscacheutil

答案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 应用程序一致的结果。

我发现这个https://random.ac/cess/2018/04/12/macos-dig-vs-dscacheutil-while-using-split-dns-with-viscosity-vpn-client/

答案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.域名.comA

www.域名.com麦克

www.域名.com纳秒

也可用于查询特定的名称服务器

www.域名.com一个@ns1.domain.com

相当简单的本机工具,您几乎可以在每台 UNIX 机器(包括 Mac OSX)上找到它。

相关内容