Могу ли я перечислить все запущенные службы Bonjour?

21

Мне было бы интересно узнать, какие программы рекламируют себя, используя Bonjour на моей машине. Есть ли способ сделать это?

zneak
источник

Ответы:

36

Для этого dns-sdможет пригодиться инструмент командной строки, но освоить его немного сложно.

Запуск dns-sd -B _services._dns-sd._udpвернет список всех доступных типов услуг, которые в настоящее время рекламируются. (Список для каждого интерфейса, поэтому будет некоторая избыточность.) Если это делается на Mac без активного сетевого подключения, список, конечно, будет содержать только службы, запущенные на этом компьютере.

Используя этот список, вы можете запросить информацию об отдельных типах сервисов, запустив что-то вроде dns-sd -B _home-sharing._tcp(в котором перечислены экземпляры iTunes Home Sharing), а затем, учитывая имя экземпляра, вы можете запустить dns-sd -L "Wes Campaigne’s Library" _home-sharing._tcpпоиск информации для конкретного экземпляра.

Однако, если честно, весь этот процесс довольно утомителен, и именно для этого создан Discovery (ранее Bonjour Browser), поэтому я настоятельно рекомендую использовать его. Однако, каким бы способом вы это ни делали, может быть не всегда понятно, какая программа отвечает за данную запись службы.

Вы можете использовать стратегию, приведенную в ответе двоичного боба, чтобы попытаться сопоставить записи службы с запущенными процессами на основе номера порта, но это может не всегда работать. Другая стратегия состоит в том, чтобы запустить что-то подобное, dns-sd -B _home-sharing._tcpкоторое остается открытым, и сообщает, когда экземпляры добавляются или удаляются, затем один за другим выходят из различных приложений и (при условии, что это не системная служба) видят, какое из них завершает работу, вызывает сообщение об удалении.

Уэс Кампейн
источник
Похоже, сервис обмена музыкой теперь называется _daap.
zneak
На самом деле, DAAP относится к более старым из двух отдельных форм совместного использования библиотек iTunes. DAAP включается через «Настройки»> «Общий доступ»> «Раздать мою библиотеку» в моей локальной сети. Домашний доступ, добавленный в iTunes 9, включается через «Файл»> «Домашний доступ». Он использует ваш Apple ID для аутентификации.
Уэс Кампэйн
5

Хотя это может не соответствовать вашим точным критериям, Bonjour Browser от Tildesoft может перечислить все бонусы, рекламируемые в вашей локальной сети, и хосты, которые их рекламируют.

Я предполагаю, что для локально рекламируемых сервисов вы можете развернуть в Bonjour Browser, чтобы найти номер порта, на котором рекламируется сервис, а затем использовать lsofдля определения приложения, связанного с ним, например:

lsof -i | grep 57857

дает

iTunes    36720   ...     TCP *:57857 (LISTEN)

когда у меня работает iTunes.

binarybob
источник
2

Несмотря на то, что классифицируется как устаревшая статья, вполне может быть, что вы ищете: DNSServiceMetaQuery. Как указано в документации:

В этом примере DNSServiceQueryRecord используется для отправки многоадресного DNS-запроса, который возвращает список типов служб Bonjour, объявленных в локальной сети. Машины должны быть запущены mDNSResponder-58.6 (Mac OS X 10.3.4) или новее, чтобы ответить на этот запрос.

Чтобы запустить DNSServiceMetaQuery в Mountain Lion (включенная сборка не работает должным образом), перейдите по ссылке примера кода и нажмите «Скачать образец кода». Затем установите Xcode, если вы еще этого не сделали. Создайте новый проект под шаблоном Mac OS X> Приложение> Инструмент командной строки .

Откройте и скопируйте весь текст ~/Downloads/DNSServiceMetaQuery/DNSServiceMetaQuery.cи вставьте его в main.cновый проект инструмента командной строки (заменив все, что было в шаблоне). Затем вам нужно добавить CoreFoundation.framework в проект, щелкнув имя проекта на боковой панели> Фазы сборки и открыть стрелку раскрывающегося списка рядом с Link Binary With Libraries. Нажмите +кнопку, найдите CoreFoundation.framework и добавьте его. Затем нажмите кнопку «Выполнить» (выглядит как кнопка воспроизведения) и подождите, пока изображение Build Succeeded. Что-то должно прийти с кнопки окна с журналом; это покажет все ваши услуги Bonjour. Убедитесь, что все выходные проверены.

Итан Ли
источник
Я опытный программист, поэтому я знаю, как обходиться с XCode (и это хорошо, потому что я не уверен, что хотел бы установить XCode только для этого). Я проверю это, спасибо!
zneak
Apple удалила код, однако он доступен на зеркале .
г-н Тао
@ Mr.Tao Код по-прежнему существует на сайте Apple. Я обновил ссылку в ответе
Джей О'Конор