web-dev-qa-db-ja.com

ターミナルからmacOS DNSリゾルバーをクエリする方法は?

DigHostなどのツールを使用してDNSをクエリする方法を知っています。しかし、macOSのマニュアルページには次のように記載されています。

DNSクエリの結果は、macOS DNSルーティングライブラリを使用するクエリと異なる場合もあります。

それでは、ターミナルでDNSにクエリを実行して、ネイティブmacOSアプリと同じ結果を得るにはどうすればよいですか?

DNSの変更をテストすると、UNIXツールとネイティブのMacアプリケーションで異なる結果が表示されることがあります。これが私が遭遇した例です:

$ Dig +short example.com
192.168.0.100

Digは、DNSクエリが独自のDNSサーバーによって処理されるローカルアドレスを返すことを示しています。一方、macOSの「ネットワークユーティリティ」ルックアップを使用すると、キャッシュされた結果が返されます。

Network Utility lookup showing cached IP address

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リゾルバーを使用することに興味があります。私はmDNSResponderdns-sdscutilnetworksetup、およびdscacheutilのmanページを調べましたが、どれもDNSを照会していないようです。

8
Josh

問題をよりよく理解し、より正確なグーグル検索を実行して答えを見つけるために、私は問題を理解するために努力を払っているようです。

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/ から見つけました=

14
Josh