Как сделать обратный mDNS через IPv6 в OSX?

Я ищу способ сделать обратный запрос mDNS на OSX только через IPv6. Меня не интересует решение, использующее IPv4.

Следующее работает в Linux с dig 9.16.1:

dig +short @ff02::fb -p 5353 -x 2001:db8::1

Я установил dig 9.16.7 с homebrew на OSX , эта команда с теми же аргументами дает тайм-аут. И нет никаких признаков исходящего запроса в Wireshark.

Следующее работает хорошо как в Linux, так и в OSX:

dig +short @224.0.0.251 -p 5353 -x 192.168.1.23

Двоичный avahi-resol-address недоступен в OSX, и я не сделал этого » t найти способ заставить обратный DNS работать с dns-sd .

Вот используемая версия операционной системы:

  • Версия OSX: Catalina 10.15.7
  • Linux: Ubuntu 20.04
1
задан 13 October 2020 в 00:03
1 ответ

Я нашел несколько способов сделать это, но оба они немного уродливы. Во-первых, вы можете использовать dns-sd -q и указать тип записи ptr... но вам нужно преобразовать адрес, который вы хотите найти, в nibble-by -откусите обратный формат самостоятельно. Например, чтобы найти fe80::4e6:97e7:d892:d977, вы должны использовать:

dns-sd -q 7.7.9.d.2.9.8.d.7.e.7.9.6.e.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa ptr

К сожалению, это работает только для локальных адресов, а не для общедоступных адресов. Понятия не имею почему. Также обратите внимание, что dns-sd не завершает работу автоматически после выполнения поиска, но продолжает отслеживать изменения. Вам нужно убить его через некоторое время.

Вы также можете использовать dig, что-то вроде вашей исходной команды, но вам нужно указать, через какой интерфейс отправлять запрос, и в довольно странном формате. «Стандартным» было бы добавить индекс зоны для интерфейса, например чтобы отправить его на ff02::fb через en1, вы должны использовать @ff02::fb%en1. Но dig не любит такой формат, поэтому приходится быть хитрее. Unix-системы на базе BSD, включая macOS, позволяют помещать числовой индекс зоны во второе 16-битное слово некоторых типов адресов, и здесь это работает.Вот (анонимный) пример, где я использую netstat -rn -f inet6, чтобы узнать, что 2001:db8:1234:5678::/64 находится на интерфейсе en1, номер ссылки этого интерфейса — 5, а затем используйте его для поиска (я добавил ^^^, чтобы выделить соответствующие части):

% netstat -rn -f inet6
Routing tables

Internet6:
Destination                             Gateway                         Flags         Netif Expire
[...]
2001:db8:1234:5678::/64                 link#5                          UC              en1       
                                        ^^^^^^                                          ^^^
[...]
% dig +short @ff02:5::fb -p 5353 -x 2001:db8:1234:5678:109f:8688:b2d1:3f12
                   ^
Gordons-MacBook.local.
2
ответ дан 13 October 2020 в 00:04

Теги

Похожие вопросы