¿Puedo enumerar todos los servicios habilitados para Bonjour que se ejecutan?

20

Me gustaría saber qué programas se anuncian usando Bonjour en mi máquina. ¿Hay alguna manera de hacer eso?

    
pregunta zneak 29.09.2012 - 05:47

3 respuestas

34

La herramienta de línea de comandos dns-sd puede ser útil para esto, pero aprender a usarla es un poco complicado.

La ejecución de 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á cierta redundancia). Si esto se hace en una Mac sin conexión de red activa, la lista, por supuesto, solo contendrá los 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. una instancia particular.

Sin embargo, para ser honesto, todo este proceso es bastante tedioso, y es exactamente para lo que se creó Bonjour Browser , por lo que Recomiendo altamente usar eso. (La aplicación puede ser antigua, pero aún funciona.) Sea como sea que lo hagas, puede que no siempre quede claro qué programa es responsable de una entrada de servicio determinada.

Puede usar la estrategia dada en respuesta de binarybob para tratar de asignar entradas de servicio a procesos en ejecución basados en el puerto Número, pero esto no siempre puede funcionar. Otra estrategia es ejecutar algo como dns-sd -B _home-sharing._tcp que permanece abierto e informa cuando se agregan o eliminan instancias, luego, una por una, cierra varias aplicaciones y (asumiendo que no es un servicio del sistema) ve cuál de ellas desencadena el mensaje de eliminación. / p>     

respondido por el Wes Campaigne 03.01.2013 - 06:23
4

Aunque podría no satisfacer sus criterios exactos, Navegador Bonjour de Tildesoft puede enumerar todos los servicios de bonjour anunciados en su red local y Los anfitriones que los anuncian.

Supongo que para los servicios anunciados localmente, puede profundizar en Bonjour Browser para encontrar el número de puerto en el que se anuncia el servicio, luego usar lsof para determinar la aplicación asociada, por ejemplo:

lsof -i | grep 57857

da

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

cuando tengo iTunes ejecutándose.

    
respondido por el binarybob 29.09.2012 - 09:26
2

Aunque está clasificado como un artículo heredado, esto puede ser lo que está buscando: DNSServiceMetaQuery. Como se indica 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 a enlace de código de muestra y haga clic en Descargar código de muestra. Luego, instale Xcode si aún no lo ha 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 en ~/Downloads/DNSServiceMetaQuery/DNSServiceMetaQuery.c y péguelo en main.c de su nuevo proyecto de la herramienta de línea de comandos (reemplazando todo lo que había en la plantilla). A continuación, deberá agregar CoreFoundation.framework al proyecto haciendo clic en el nombre del proyecto en la barra lateral > Cree fases y abra la flecha desplegable junto a Vincular binarios con bibliotecas. Haga clic en el botón + , busque CoreFoundation.framework y añádalo. Luego, haga clic en el botón Ejecutar (se parece a un botón de reproducción) y espere a que aparezca la imagen Construir correctamente. Algo debe venir del botón de la ventana con un registro; Esto mostrará todos sus servicios de Bonjour. Asegúrate de que toda la salida esté marcada.

    
respondido por el Ethan Lee 29.09.2012 - 08:40

Lea otras preguntas en las etiquetas