Я знаю, как запрашивать DNS с помощью таких инструментов, как dig , host и т.д. Но на их страницах man macOS указано:

Результаты DNS-запросов также могут отличаться от запросов, использующих библиотеку маршрутизации DNS macOS.

Учитывая это, как я могу запрашивать DNS в терминале и получать те же результаты, что и родные приложения MacOS?

При тестировании изменений DNS я иногда вижу разные результаты между инструментами Unix и родными приложениями Mac. Вот пример того, с чем я столкнулся:

$ dig +short example.com
192.168.0.100

dig показывает, что DNS-запрос возвращает локальный адрес, обрабатываемый нашим собственным DNS-сервером. Между тем, использование macOS 'Network Utility' возвращает кэшированный результат:

Сетевая утилита поиска, показывающая кэшированный 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, меня интересует использование встроенного преобразователя DNS macOS из скрипта. Я просмотрел справочные страницы для mDNSResponder , dns-sd , scutil , networksetup и dscacheutil ни одна из которых, похоже, не запрашивает dns.

1 ответ1

0

Кажется, что прилагая усилия, чтобы сформулировать вопрос, я понял проблему лучше, чтобы выполнить более точный поиск в Google и нашел ответ.

На 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-visidity-vpn-client/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .