Puis-je répertorier tous les services compatibles avec Bonjour qui fonctionnent?

21

Je serais intéressé de savoir quels programmes se font connaître en utilisant Bonjour sur ma machine. Y-a-t-il un moyen de faire ça?

zneak
la source

Réponses:

36

L' dns-sdoutil de ligne de commande peut être utile pour cela, mais apprendre à l'utiliser est un peu délicat.

L'exécution dns-sd -B _services._dns-sd._udprenvoie une liste de tous les types de services disponibles actuellement annoncés. (La liste est par interface, il y aura donc une certaine redondance.) Si cela se fait sur un Mac sans connexion réseau active, la liste ne contiendra bien sûr que les services exécutés sur cette machine.

À l'aide de cette liste, vous pouvez demander des informations sur les types de services individuels en exécutant des choses comme dns-sd -B _home-sharing._tcp(qui répertorie les instances de partage à domicile iTunes), puis, en fonction d'un nom d'instance, vous pouvez exécuter dns-sd -L "Wes Campaigne’s Library" _home-sharing._tcppour rechercher des informations pour une instance particulière.

Pour être honnête, cependant, tout ce processus est plutôt fastidieux, et c'est exactement ce que Discovery (anciennement Bonjour Browser) a été conçu pour faire, donc je recommande fortement de l'utiliser. Quelle que soit la façon dont vous le faites, cependant, il peut ne pas toujours être clair quel programme est responsable d'une entrée de service donnée.

Vous pouvez utiliser la stratégie donnée dans la réponse de binarybob pour essayer de mapper les entrées de service aux processus en cours en fonction du numéro de port, mais cela peut ne pas toujours fonctionner. Une autre stratégie consiste à exécuter quelque chose comme dns-sd -B _home-sharing._tcpqui reste ouvert et signale lorsque des instances sont ajoutées ou supprimées, puis, une par une, quittez diverses applications et (en supposant qu'il ne s'agit pas d'un service système), voyez laquelle quitter déclenche le message de suppression.

Wes Campaigne
la source
Il semble que le service de partage de musique soit désormais appelé _daap.
zneak
En fait, DAAP fait référence à la plus ancienne des deux formes distinctes de partage de bibliothèque d'iTunes. DAAP est activé via Préférences> Partage> Partager ma bibliothèque sur mon réseau local. Le partage à domicile, ajouté dans iTunes 9, est activé via Fichier> Partage à domicile. Il utilise votre identifiant Apple pour l'authentification.
Wes Campaigne
5

Bien qu'il puisse ne pas répondre à vos critères exacts, le navigateur Bonjour de Tildesoft peut répertorier tous les services bonjour annoncés sur votre réseau local et les hôtes qui les annoncent.

Je suppose que pour les services publiés localement, vous pouvez explorer le navigateur Bonjour pour trouver le numéro de port sur lequel le service est annoncé, puis l'utiliser lsofpour déterminer l'application qui lui est associée, par exemple:

lsof -i | grep 57857

donne

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

lorsque j'exécute iTunes.

binarybob
la source
2

Bien que classé comme un article hérité, cela pourrait très bien être ce que vous recherchez: DNSServiceMetaQuery. Comme indiqué dans la documentation:

Cet exemple utilise DNSServiceQueryRecord pour envoyer une requête DNS multidiffusion qui renvoie une liste des types de service Bonjour annoncés sur le réseau local. Les machines doivent exécuter mDNSResponder-58.6 (Mac OS X 10.3.4) ou une version ultérieure pour répondre à cette requête.

Pour exécuter DNSServiceMetaQuery sur Mountain Lion (la version incluse ne fonctionne pas correctement), accédez au lien d'exemple de code et cliquez sur Télécharger l'exemple de code. Ensuite, installez Xcode si vous ne l'avez pas déjà fait. Créez un nouveau projet sous le modèle de Mac OS X> Application> Outil de ligne de commande .

Ouvrez et copiez tout le texte dans ~/Downloads/DNSServiceMetaQuery/DNSServiceMetaQuery.cet collez-le dans main.cvotre nouveau projet d'outil de ligne de commande (en remplaçant tout ce qui était là dans le modèle). Ensuite, vous devrez ajouter CoreFoundation.framework au projet en cliquant sur le nom du projet dans la barre latérale> Phases de construction et ouvrez la flèche déroulante à côté de Lier le binaire aux bibliothèques. Cliquez sur le +bouton, recherchez CoreFoundation.framework et ajoutez-le. Cliquez ensuite sur le bouton Exécuter (ressemble à un bouton de lecture) et attendez une image Build Succeeded. Quelque chose devrait provenir du bouton de la fenêtre avec un journal; cela affichera tous vos services Bonjour. Assurez-vous que Toutes les sorties est coché.

Ethan Lee
la source
Je suis un programmeur compétent, donc je connais bien Xcode (et c'est une bonne chose parce que je ne suis pas sûr de vouloir installer Xcode juste pour ça). Je vais le vérifier, merci!
zneak
Apple a supprimé le code, cependant, il est disponible sur un miroir .
M. Tao
@ Mr.Tao Le code existe toujours sur le site d'Apple. J'ai mis à jour le lien dans la réponse
Jay O'Conor