¿Puedo enumerar todos los servicios habilitados para Bonjour que se están ejecutando?

21

Me interesaría saber qué programas se anuncian utilizando Bonjour en mi máquina. ¿Hay una manera de hacerlo?

zneak
fuente

Respuestas:

36

La dns-sdherramienta 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._udpdevolverá 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._tcppara 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._tcpque 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.

Wes Campaigne
fuente
Parece que ahora se llama al servicio de intercambio de música _daap.
zneak
En realidad, DAAP se refiere a las dos formas diferentes de compartir bibliotecas de iTunes. DAAP se habilita a través de Preferencias> Compartir> Compartir mi biblioteca en mi red local. Compartir en casa, agregado en iTunes 9, se habilita a través de Archivo> Compartir en casa. Utiliza su ID de Apple para la autenticación.
Wes Campaigne
5

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 lsofpara determinar la aplicación asociada con él, por ejemplo:

lsof -i | grep 57857

da

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

cuando tengo iTunes ejecutándose.

binarybob
fuente
2

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.cy péguelo en main.csu 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.

Ethan Lee
fuente
Soy un programador competente, así que conozco Xcode (y eso es algo bueno porque no estoy seguro de que me gustaría instalar Xcode solo por eso). Lo comprobaré, gracias!
zneak
Apple ha eliminado el código, sin embargo, está disponible en un espejo .
Sr. Tao
@ Mr.Tao El código aún existe en el sitio de Apple. He actualizado el enlace en la respuesta
Jay O'Conor