Я знаю, как запрашивать 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' возвращает кэшированный результат:
используя инструмент достижимости сети 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.