Dig
、Host
などのツールを使用してDNSをクエリする方法を知っています。しかし、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
ネイティブMacアプリと同じヒューリスティックを使用してアドレスを解決するmacOSコマンドラインユーティリティはありますか?注:DNSキャッシュをクリアすることには興味がなく、スクリプトからネイティブmacOS DNSリゾルバーを使用することに興味があります。私はmDNSResponder
、dns-sd
、scutil
、networksetup
、およびdscacheutil
のmanページを調べましたが、どれもDNSを照会していないようです。
問題をよりよく理解し、より正確なグーグル検索を実行して答えを見つけるために、私は問題を理解するために努力を払っているようです。
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シェルコマンドと同様に、Unixの同等のコマンドほど優れていませんが、ネイティブのMacアプリと一貫した結果が得られます。
私はこれを https://random.ac/cess/2018/04/12/macos-Dig-vs-dscacheutil-while-using-split-dns-with-viscosity-vpn-client/ から見つけました=