Ответы:
Для этого 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
которое остается открытым, и сообщает, когда экземпляры добавляются или удаляются, затем один за другим выходят из различных приложений и (при условии, что это не системная служба) видят, какое из них завершает работу, вызывает сообщение об удалении.
Хотя это может не соответствовать вашим точным критериям, Bonjour Browser от Tildesoft может перечислить все бонусы, рекламируемые в вашей локальной сети, и хосты, которые их рекламируют.
Я предполагаю, что для локально рекламируемых сервисов вы можете развернуть в Bonjour Browser, чтобы найти номер порта, на котором рекламируется сервис, а затем использовать lsof
для определения приложения, связанного с ним, например:
lsof -i | grep 57857
дает
iTunes 36720 ... TCP *:57857 (LISTEN)
когда у меня работает iTunes.
Несмотря на то, что классифицируется как устаревшая статья, вполне может быть, что вы ищете: 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. Убедитесь, что все выходные проверены.
_daap
.