Respuestas:
La dns-sd
herramienta de línea de comandos puede ser útil para esto, pero aprender a usarla es un poco complicado.
La ejecución dns-sd -B _services._dns-sd._udp
devolverá una lista de todos los tipos de servicios disponibles que se anuncian actualmente. (La lista es por interfaz, por lo que habrá algo de redundancia). Si esto se hace en una Mac sin conexión de red activa, la lista solo contendrá servicios que se ejecutan en esa máquina.
Usando esa lista, puede solicitar información sobre los tipos de servicios individuales ejecutando cosas como dns-sd -B _home-sharing._tcp
(que enumera las instancias de iTunes Home Sharing), y luego, dado un nombre de instancia, puede ejecutar dns-sd -L "Wes Campaigne’s Library" _home-sharing._tcp
para buscar información para una instancia en particular.
Sin embargo, para ser honesto, todo este proceso es bastante tedioso, y es exactamente para lo que se creó Discovery (anteriormente Bonjour Browser), por lo que recomiendo encarecidamente usarlo. Sin embargo, sea cual sea la forma en que lo haga, puede que no siempre esté claro qué programa es responsable de una entrada de servicio determinada.
Puede usar la estrategia dada en la respuesta de binarybob para intentar asignar entradas de servicio a procesos en ejecución en función del número de puerto, pero esto no siempre funciona. Otra estrategia es ejecutar algo como lo dns-sd -B _home-sharing._tcp
que permanece abierto e informa cuando se agregan o eliminan instancias, luego, una por una, sale de varias aplicaciones y (suponiendo que no es un servicio del sistema) ve quién está cerrando el mensaje de eliminación.
Aunque puede que no satisfaga sus criterios exactos, el navegador Bonjour de Tildesoft puede enumerar todos los servicios bonjour anunciados en su red local y los hosts que los anuncian.
Supongo que para los servicios anunciados localmente, puede profundizar en el navegador Bonjour para encontrar el número de puerto en el que se anuncia el servicio y luego usarlo lsof
para determinar la aplicación asociada con él, por ejemplo:
lsof -i | grep 57857
da
iTunes 36720 ... TCP *:57857 (LISTEN)
cuando tengo iTunes ejecutándose.
Aunque está clasificado como un artículo heredado, esto muy bien puede ser lo que está buscando: DNSServiceMetaQuery. Como se describe en la documentación:
Este ejemplo utiliza DNSServiceQueryRecord para enviar una consulta DNS de multidifusión que devuelve una lista de los tipos de servicio Bonjour que se anuncian en la red local. Las máquinas deben ejecutar mDNSResponder-58.6 (Mac OS X 10.3.4) o posterior para responder a esta consulta.
Para ejecutar DNSServiceMetaQuery en Mountain Lion (la compilación incluida no se ejecuta correctamente), vaya al enlace del código de muestra y haga clic en Descargar código de muestra. Luego, instala Xcode si aún no lo has hecho. Cree un nuevo proyecto bajo la plantilla de Mac OS X> Aplicación> Herramienta de línea de comandos .
Abra y copie todo el texto ~/Downloads/DNSServiceMetaQuery/DNSServiceMetaQuery.c
y péguelo en main.c
su nuevo proyecto de herramienta de línea de comandos (reemplazando todo lo que estaba allí en la plantilla). A continuación, deberá agregar CoreFoundation.framework al proyecto haciendo clic en el nombre del proyecto en la barra lateral> Fases de compilación y abra la flecha desplegable junto a Vincular binario con bibliotecas. Haga clic en el +botón, busque CoreFoundation.framework y agréguelo. Luego haga clic en el botón Ejecutar (parece un botón de reproducción) y espere a que se genere una imagen con éxito. Algo debería venir del botón de la ventana con un registro; Esto mostrará todos sus servicios de Bonjour. Asegúrese de que Todas las salidas estén marcadas.
_daap
.