web-dev-qa-db-fra.com

Comment utiliser Bonjour?

  1. Tout d'abord, quel est exactement bonjour (Plays lisez mes suppositions écrites ci-dessous) ?
    [.____] ICI J'ai découvert que Bonjour permet une découverte automatique des ordinateurs, des périphériques et des services sur les réseaux IP. Mais je pensais que cela non seulement "découvre des périphériques sur le réseau IP" crée également un réseau IP en attribuant des adresses IP aux périphériques où Bonjour est en cours d'exécution. Ai-je raison ?

  2. Et je manque toujours l'essence. Fonctionne-t-il de la manière suivante? D'abord, je connecte des périphériques (par exemple les ordinateurs portables) physiquement afin qu'ils puissent potentiellement communiquer entre eux. Ensuite, disons, sur certains ordinateurs portables, j'ai de bonjour courir, puis, en conséquence, ces ordinateurs portables attribuent des adresses IP à une manière automatique. Ainsi, les ordinateurs portables (où Bonjour est en cours d'exécution) Construisez un réseau IP. ça marche de cette façon ?

  3. Ou peut-être un ordinateur de bonjour à exécuter n'est pas considéré comme un service et il ne se diffuse pas simplement parce que Bonjour est en cours d'exécution sur cet ordinateur. Je veux dire que les applications exécutées sur les ordinateurs doivent utiliser Bonjour pour se diffuser. Donc, ce sont des applications qui se diffusent (pas des ordinateurs) et ne sont pas effectuées automatiquement (les besoins de l'application doivent se diffuser explicitement). C'est vrai ?

  4. Comment exactement ma candidature peut se diffuser? Puis-je utiliser la ligne de commande pour enregistrer un service (afin que toutes les applications utilisant Bonjour sait qu'un nouveau service est apparu)?

  5. En outre, j'aimerais avoir une application qui utilise le réseau IP créé par Bonjour. Pour que mon application ait besoin de savoir quels périphériques/services sont présents dans le réseau. Dans plus de détails, mon application doit avoir une liste de services. Chaque service de la liste doit avoir un nom, l'adresse IP où elle s'exécute et le port utilisé par l'application. Bonjour peut fournir ces informations d'une manière ou d'une autre ? Si c'est le cas, comment cela fonctionne exactement. Comment mon programme peut-il obtenir cette information de Bonjour? Mon programme peut-il lire un certain fichier créé par Bonjour et contenant les informations mentionnées ci-dessus? Puis-je utiliser des commandes dans la ligne de commande pour récupérer ces informations?

  6. J'ai un intérêt particulier à accéder aux informations sur les services à partir de fichiers, de variables d'environnement ou de commandes dans la ligne de commande. Ces options me semble être la plus simple! Depuis lors, je n'ai pas besoin d'utiliser des bibliothèques supplémentaires pour communiquer avec Bonjour à partir d'une langue de programmation particulière.

P.s. Posez des questions si quelque chose n'est pas clair dans ma question. Je vais essayer de formuler ma question de manière plus claire.

P.p.s. J'utilise Windows 7.

Ajouté: Je prévois d'écrire mes applications en PHP. Chaque ordinateur doit exécuter un serveur Web Apache. Et je veux utiliser Bonjour pour aider l'ordinateur à se découvrir (les ordinateurs travaillent dans un réseau local).

27
Roman
  1. Oui. Stuart Cheshire, qui était le créateur et est un responsable principal de Rendezvous/Bonjour à Apple, qui a également coprésidé le groupe de travail de l'IETF Zeroconf et a écrit le livre O'Reilly sur la mise en réseau de la configuration zéro, a décrit Bonjour en tant que "trois Tabouret sur pattes "où sont les jambes:

    1. IPv4 (et IPv6) Link-local adressage
    2. Résolution de nom de multicast (MDN)
    3. Discothèques du service DNS (DNS-SD)

    Le groupe de travail de l'IETF ZerOconf et Apple envisagent tous deux des adresses locales de liaison, en particulier de l'adressage local IPv4 (169.254.0.0/16 adresses) pour faire partie de Zeroconf/Bonjour, même si des années de liaison locales sont expédiées avant les deux autres "jambes du tabouret ".

    Notez que, étant donné que Windows prend déjà en charge l'adressage automatique de Link-Link-local, même sans que le logiciel Windows est installé, de nombreux utilisateurs de Windows ne pensent pas à IPv4 Link-Link-Local Adressage de faire partie de BONJOUR/ZEROCONF.

  2. Oui. Les machines Mac et Windows, par défaut, do IPv4 Link-local adressage-local s'ils sont configurés pour DHCP, mais il n'existe aucun serveur DHCP disponible. Les machines Linux et BSD avec AVAHI (ou éventuellement d'autres implémentations ZerOconf) sont également installées.

  3. Si un ordinateur exécute Bonjour, son nom d'hôte est publié sur le réseau local via MDNS. Si le nom de votre machine est "Alice", ce sera Alice.local via MDNS. D'un autre ordinateur (appelons-le "Bob") sur le même réseau local (spécifiquement, sur le même domaine de multidiffusion local de lien), vous devriez être capable de taper ping Alice.local et Bob devrait faire une recherche de MDNS de Alice.local pour découvrir l'IP d'Alice adresse (ES) et ping (l'une des) adresse (es) qu'elle revient.

    Notez cependant que BONJOUR se différencie entre les noms d'hôte et les noms de service. Par exemple, si vous avez deux imprimantes USB distinctes, disons "HP" et "Canon", connectés à Alice et Alice agissent comme, disons, un serveur d'impression lpr pour les deux, ils peuvent chacun montrer comme leur propre service, qui correspond à Alice.local comme hôte.

    Leurs noms de service apparaîtraient à l'utilisateur comme "HP" et "Canon" sans mention d'Alice. Dans les coulisses, ils seraient connus sous le nom de HP._printer._tcp.local et Canon._printer._tcp.local, et les recherches DNS-SD sur ces noms de service montreraient que ces services sont disponibles sur Alice.local sur deux ports TCP.

    Donc, oui, les applications doivent notifier le démon Bonjour (appelé mDNSResponder dans la mise en œuvre de Apple) qu'ils ont des services qu'ils souhaitent faire de la publicité. MacOS a des mécanismes permettant de gérer automatiquement la publicité des services pour les services hérités qui ne sont pas naturellement connus. Par exemple, la version de MacOS sshd est opensh, qui ne prend pas en charge Bonjour directement, mais MacOS s'occupe de la publicité du service ssh via Bonjour afin de pouvoir simplement ssh [email protected] d'autres machines sur le réseau local.

  4. Sur MacOS, un outil de ligne de commande "DNS-SD" pouvant enregistrer un service à l'aide de cette syntaxe:

    dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...]  
    # (Register a service)
    

    Donc, par exemple:

    dns-sd -R MyWebsite _http._tcp local 80
    

    Je ne serais pas surpris que cela soit inclus dans Bonjour pour Windows ou le SDK Bonjour pour Windows, ou si vous pouvez le compiler pour Windows du projet Open-Source d'Apple MDNSresponder . Googling pour dns-sd.exe, je vois une telle chose existe. Je ne suis pas sûr de télécharger un binaire pour cela. Au lieu de cela, j'essaierais de l'obtenir de l'un des paquets mentionnés ci-dessus ou de le compiler moi-même des sources de projet MDNSresponder.

  5. Vous pouvez également utiliser l'outil de ligne de commande dns-sd pour parcourir les services et les regarder. Voici un exemple de recherche d'un service Web local:

    Recherchez des services Web locaux avec -B:

    $ dns-sd -B _http._tcp local  
    Browsing for _http._tcp.local  
    Timestamp     A/R Flags if Domain                    Service Type              Instance Name  
    16:30:59.870  Add     3  6 local.                    _http._tcp.               My Cool Web App  
    16:30:59.871  Add     3  6 local.                    _http._tcp.               Someone Else's Web Service  
    16:30:59.871  Add     3  6 local.                    _http._tcp.               A Third One  
    ^C
    

    Regarde celui que je veux, "mon application web cool", avec -L:

    $ dns-sd -L "My Cool Web App" _http._tcp local  
    Lookup My Cool Web App._http._tcp.local  
    16:31:52.678  My\032Cool\032Web\032App._http._tcp.local. can be reached at MyWebServer.local.:80 (interface 6)  
    ^C  
    

    Requête les adresses IP pour MyWebServer.Local, avec -Q:

    $ dns-sd -Q MyWebServer.local  
    Timestamp     A/R Flags if Name                             T   C Rdata  
    16:32:40.786  Add     2  6 MyWebServer.local.               1   1 169.254.45.209  
    ^C  
    

    Notez dans ces exemples que vous devez Ctrl-C de l'outil dns-sd. Sinon, il restera ouvert pour toujours, surveille continuellement le réseau et rapportera tout changement dans les résultats de la requête que vous avez émis (tels que les serveurs Web arrivant et allant sur le réseau, pendant que vous êtes assis avec une requête -B Parcourir la requête ouverte). J'ai constaté que pour cela et d'autres raisons, l'outil dns-sd n'est pas bien adapté pour être appelé à partir d'un script. Vous voudrez peut-être examiner les bibliothèques Zeroconf pour votre langue préférée après tout.

Pour répondre à l'une de vos autres questions, je ne suis au courant d'aucune implémentation de Zeroconf qui vous permet d'effectuer des requêtes et d'obtenir des résultats uniquement en lisant/écriture. La plupart des applications qui utilisent Bonjour le font en appelant les API, soit directement (C/C++/Obj-C/Swift Apps), soit via une bibliothèque spécifique à la langue (langages interprétés/scripts).

54
Spiff

Tout d'abord, quel est exactement bonjour (les plaidètes lisent-elles mes suppositions écrites ci-dessous)? Ici, j'ai découvert que Bonjour permet une découverte automatique des ordinateurs, des périphériques et des services sur les réseaux IP. Mais je pensais que cela non seulement "découvre des périphériques sur le réseau IP" crée également un réseau IP en attribuant des adresses IP aux périphériques où Bonjour est en cours d'exécution. Ai-je raison?

Pas assez; Comme le soulignait Jon, DHCP (généralement) est utilisé pour allouer des adresses IP. De la même manière que les DNS ordinaires traduisent les noms de domaine aux adresses IP, BONJOUR est utilisé pour traduire des noms de domaine temporaires (dans le réseau local) vers les adresses IP leur fournissant.

Et je manque toujours l'essence. Fonctionne-t-il de la manière suivante? D'abord, je connecte des périphériques (par exemple les ordinateurs portables) physiquement afin qu'ils puissent potentiellement communiquer entre eux. Ensuite, disons, sur certains ordinateurs portables, j'ai de bonjour courir, puis, en conséquence, ces ordinateurs portables attribuent des adresses IP à une manière automatique. Ainsi, les ordinateurs portables (où Bonjour est en cours d'exécution) Construisez un réseau IP. Ça marche de cette façon?

Nan; Les ordinateurs portables obtiennent principalement des adresses IP d'un serveur DHCP local. Bonjour les aide simplement à déterminer quels services peuvent fournir aux autres.

Ou peut-être un ordinateur de bonjour à exécuter n'est pas considéré comme un service et il ne se diffuse pas simplement parce que Bonjour est en cours d'exécution sur cet ordinateur. Je veux dire que les applications exécutées sur les ordinateurs doivent utiliser Bonjour pour se diffuser. Donc, ce sont des applications qui se diffusent (pas des ordinateurs) et ne sont pas effectuées automatiquement (les besoins de l'application doivent se diffuser explicitement). Est ce bien?

Oui - Généralement, votre demande devra faire de la publicité explicitement de son existence. Cela peut souvent être effectué à l'aide de bibliothèques (communes sur OS X) fournies par le système ou de bibliothèques personnalisées (E.G. Net de Perl :: Bonjour).

Comment exactement mon application peut se diffuser? Puis-je utiliser la ligne de commande pour enregistrer un service (afin que toutes les applications utilisant Bonjour sait qu'un nouveau service est apparu)

Je ne suis pas au courant d'un outil de ligne de commande qui fait cela, mais de nombreuses langues de programmation majeures ont des bibliothèques disponibles pour le faire.

En outre, j'aimerais avoir une application qui utilise le réseau IP créé par Bonjour. Pour que mon application ait besoin de savoir quels périphériques/services sont présents dans le réseau. Dans plus de détails, mon application doit avoir une liste de services. Chaque service de la liste doit avoir un nom, l'adresse IP où elle s'exécute et le port utilisé par l'application. Bonjour peut fournir ces informations d'une manière ou d'une autre?

La plupart des bibliothèques de Bonjour devraient pouvoir le faire pour vous; Voir le premier exemple à http://search.cpan.org/~chlige/net-bonjour-0.96/lib/net/bonjour.pm

Si c'est le cas, comment ça marche exactement. Comment mon programme peut-il obtenir cette information de Bonjour? Mon programme peut-il lire un certain fichier créé par Bonjour et contenant les informations mentionnées ci-dessus? Puis-je utiliser des commandes dans la ligne de commande pour récupérer ces informations?

En utilisant les bibliothèques appropriées, le programme utilise le protocole Bonjour pour demander à tous les autres ordinateurs de votre réseau local de le dire quels services sont disponibles. Cette bibliothèque analysera ensuite les réponses et vous les présentera dans un format plus utile.

J'ai un intérêt particulier à accéder aux informations sur les services à partir de fichiers, de variables d'environnement ou de commandes dans la ligne de commande. Ces options me semble être la plus simple! Depuis lors, je n'ai pas besoin d'utiliser des bibliothèques supplémentaires pour communiquer avec Bonjour à partir d'une langue de programmation particulière.

Je ne suis pas au courant d'un outil qui fait cela, mais cela pourrait exister.

P.s. Posez des questions si quelque chose n'est pas clair dans ma question. Je vais essayer de formuler ma question de manière plus claire.

Quelques informations supplémentaires sur ce que le programme que vous écrivez ferez et quelle langue vous écrivez-vous, faciliterait l'aide.

Pour plus d'informations d'introduction, essayez les deux:

4
caelyx

Bonjour n'attribuait pas d'adresses IP - c'est un protocole de découverte - vous avez toujours besoin d'adresses IP DHCP/STATIC/LINK-LOCAL (APIPA) pour qu'il fonctionne.

Il utilise des DNS multidiffusion (MDNS) pour découvrir les hôtes sur le même domaine de diffusion que lui-même et essentiellement son propre serveur DNS.

Voir Bonjour & Zeroconf pour le mode basse.

À moins que votre demande ne soit pour un réseau home/non géré, c'est-à-dire qu'il manque un serveur DNS local dont vous n'en avez pas besoin.

3
Jon Rhoades