Как вы получаете «Имя службы Bonjour» с одного устройства?

6210
IBBoard

У меня есть два типа устройств, которые я хочу подключить через Ethernet к хосту. Я хочу знать, какой из этих двух типов устройств подключен.

Оба устройства используют Avahi / Bonjour и имеют то, что они называют «Bonjour Service Name», которое содержит полезную информацию, которую я могу использовать, чтобы различать два типа устройств, но сетевые требования означают, что я не могу использовать общий mDNS Browse, потому что он будет работать на вторичный сетевой порт хоста (что не разрешено). Это «Bonjour Service Name» последовательно используются устройства в качестве первой части всех услуг, которые они вещают (например UsefulDeviceName._http._tcp.local, UsefulDeviceName._ftp._tcp.local, UsefulDeviceName._telnet._tcp.localи т.д.).

Каждое устройство этих двух типов также имеет свое собственное уникальное DNS-имя, но это просто [GenericPrefix][MacAddress].local, что недостаточно для их дифференциации (они принадлежат одному и тому же производителю, поэтому оба типа устройств используют одинаковые блоки MAC).

Каждый инструмент, который я пробовал до сих пор, осуществляет mDNS-трансляцию через сеть и показывает имя Bonjour Service, но не соответствует требованию сети «не использовать все порты». Выполнение запроса DNS, подобного этому, возвращает нормальное имя DNS, а не имя службы Bonjour.

Мы будем знать IP устройства. Существует ли простая команда Linux, которая спросит устройство «каково ваше имя службы Bonjour?» / «Какие имена службы Bonjour у вас есть?» на что можно положиться, чтобы отправлять пакеты только через интерфейс, к которому будут подключены устройства, а не по более широкой сети?

1
Нет прямого способа получить имя Bonjour с IP-адреса. Но Bonjour Browser отображает IP-адреса на имена Bonjour. Есть способ сделать то же самое, что и Bonjour Browser через Terminal. его `днс-сд -б`. aliasgar 11 лет назад 0
Таким образом, машина знает, что она отвечает своим полным «именем службы Bonjour», когда она получает пакет многоадресной рассылки mDNS, но не может быть нажата напрямую, чтобы найти ту же информацию? Я посмотрел на avahi-browser (который звучит так, как будто он должен делать то же самое), но я понимаю, что он будет многоадресным по всем сетевым картам. IBBoard 11 лет назад 0
Да, похоже на это! aliasgar 11 лет назад 0

2 ответа на вопрос

1
IBBoard

Ответ, кажется, "нет надежного способа сделать это". Не все устройства слушают / отвечают на команды dig, перечисленные в другом ответе, а все остальное для поиска имен mDNS в сети (как avahi-browseи плохо себя ведущие mdns-scan) требует многоадресной / широковещательной рассылки и не может использоваться для проверки отдельной машины.

0
grawity

dig должно работать, если вы отправляете тот же запрос, что и различные инструменты «mDNS browser»:

dig _services._dns-sd._udp.local ptr @ ip-адрес -p 5353 

(При желании добавить +short.)

Обратите внимание, что здесь нет « имени службы Bonjour» - каждое устройство может зарегистрировать несколько служб под разными именами.

Ладно, в общем случае «Bonjour Service Name» не существует, но в этом случае на устройствах есть панель конфигурации, в которой указан один список, и я хочу его получить (и это первая часть каждого домена, возвращаемая mdns-scan, но я не могу использовать это, как объяснено ранее). Какой IP-адрес я должен использовать для @ ip-адреса ? Я только что попробовал IP-адрес устройства, но получил тайм-аут соединения - быстрый Nmap показывает, что порт не открыт. IBBoard 11 лет назад 0
@IBBoard: ip-адрес будет адресом устройства ... mDNS использует только UDP, и nmap не проверяет это по умолчанию. Но есть вероятность, что стек mDNS устройства может просто игнорировать одноадресные запросы. grawity 11 лет назад 0
Я понял, что Nmap сделал TCP только через некоторое время после публикации. Тем не менее, он определенно не отвечает на одноадресную рассылку (Wireshark показывает, что пакет выходит, но ничего не возвращается). IBBoard 11 лет назад 0

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