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

Jos*_*osh 22 networking mac dns macos

我知道如何查询DNS使用工具喜欢dighost等等。但他们的MacOS手册页状态:

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

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

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

$ dig +short example.com
192.168.0.100
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

是否有 macOS 命令行实用程序使用本机 Mac 应用程序使用的相同启发式方法来解析地址?注意:我对清除 DNS 缓存不感兴趣,我对使用脚本中的本机 macOS DNS 解析器感兴趣。我看了手册页mDNSResponderdns-sdscutilnetworksetup,和dscacheutil其中没有一个似乎DNS查询。

Jos*_*osh 32

似乎正在努力制定我更好地理解问题的问题,以执行更精确的谷歌搜索并找到答案。

在 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
Run Code Online (Sandbox Code Playgroud)

像大多数 macOS shell 命令一样,它不如 unix 等效项那么好,但它为我提供了与本机 mac 应用程序一致的结果。

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

  • 供参考:另一个有用的命令是“scutil --dns”。这将显示系统当前的 DNS 配置。(在 macOS 上,/etc/resolv.conf *不会*讲述整个故事。) (3认同)

Leo*_*sov 16

除了对dscacheutilman 文档中未涵盖的用法进行深入挖掘(双关语)外,我还想补充一点,mDNSresponder 服务位于 macOs 名称解析系统的核心,它似乎正在收集所有不同的信息。公共接口下查找信息的来源。

\n

与 mDNS 子系统交互的工具是dns-sd,因此,还有另一种查询 DNS 记录的方法,该方法将尊重所有可用的解析器:

\n
~ \xc2\xbb dns-sd -G v4v6 google.com \nDATE: ---Wed 04 Nov 2020---\n19:05:47.081  ...STARTING...\nTimestamp     A/R    Flags if Hostname                               Address                                      TTL\n19:05:47.175  Add        2  0 google.com.                            2A00:1450:4001:081D:0000:0000:0000:200E%<0>  377\n19:05:47.255  Add        2  0 google.com.                            172.217.22.110                               377\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
~ \xc2\xbb dns-sd -q google.com   \nDATE: ---Wed 04 Nov 2020---\n20:27:50.834  ...STARTING...\nTimestamp     A/R    Flags if Name                          Type  Class   Rdata\n20:27:50.925  Add        2  0 google.com.                   Addr   IN     172.217.22.110\n
Run Code Online (Sandbox Code Playgroud)\n

甚至

\n
~ \xc2\xbb dns-sd -q google.com TXT\nDATE: ---Wed 04 Nov 2020---\n20:30:45.908  ...STARTING...\nTimestamp     A/R    Flags if Name                          Type  Class   Rdata\n20: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\n20: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\n20: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\n20: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\n20: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\n
Run Code Online (Sandbox Code Playgroud)\n

说实话,这不是最好的脚本命令,因为它以交互式连续监视模式运行,该模式会通知给定地址上的任何更改,直到有人中断它。尽管它允许一些有趣的事情,例如观看仅 VPN 的路径消失,然后在您重新连接时重新出现:

\n
~ \xc2\xbb dns-sd -G v4v6 vpn.only.address.com    \nDATE: ---Wed 04 Nov 2020---\n19:10:01.672  ...STARTING...\nTimestamp     A/R    Flags if Hostname                               Address                                      TTL\n19:10:01.673  Add 40000002  0 vpn.only.address.com.                      10.100.100.100                                333\n19:10:01.759  Add        2  0 vpn.only.address.com.                      0000:0000:0000:0000:0000:0000:0000:0000%<0>  323   No Such Record\n19:10:07.703  Rmv        0  0 vpn.only.address.com.                      10.100.100.100                                0\n19:10:10.783  Add        2  0 vpn.only.address.com.                      0.0.0.0                                      4502   No Such Record\n19:10:10.905  Add        2  0 vpn.only.address.com.                      0000:0000:0000:0000:0000:0000:0000:0000%<0>  4502   No Such Record\n19:10:32.669  Add        3  0 vpn.only.address.com.                      10.100.100.100                                298\n19:10:32.670  Add        2  0 vpn.only.address.com.                      0000:0000:0000:0000:0000:0000:0000:0000%<0>  228   No Such Record\n
Run Code Online (Sandbox Code Playgroud)\n

  • https://opensource.apple.com/source/mDNSResponder/mDNSResponder-87/Clients/dns-sd.c.auto.html 表明尚未计划从事件循环中优雅退出 (2认同)