Frage Wie benutzt man Bonjour?


  1. Erstens, was genau macht Bonjour (bitte lesen Sie meine Ratschläge geschrieben unten)?
    Hier Ich habe herausgefunden, dass Bonjour die automatische Erkennung von Computern, Geräten und Diensten in IP-Netzwerken ermöglicht. Aber ich dachte, dass es nicht nur "Geräte im IP-Netzwerk entdeckt", sondern auch ein IP-Netzwerk durch Zuweisung von IP-Adressen zu Geräten, auf denen Bonjour läuft. Habe ich recht?

  2. Und ich vermisse immer noch die Essenz. Funktioniert es auf folgende Weise? Zuerst verbinde ich Geräte (zum Beispiel Laptops) physisch miteinander, so dass sie potentiell miteinander kommunizieren können. Dann, sagen wir mal, auf einigen Laptops habe ich Bonjour ausgeführt und dann ordnen diese Laptops IP-Adressen automatisch zu. Also, Laptops (wo Bonjour läuft) bauen ein IP-Netzwerk auf. Funktioniert es auf diese Weise?

  3. Oder ein Computer, auf dem Bonjour ausgeführt wird, wird nicht als Dienst betrachtet und sendet nicht selbst, nur weil Bonjour auf diesem Computer ausgeführt wird. Ich meine, dass die Anwendungen, die auf den Computern ausgeführt werden, Bonjour verwenden müssen, um sich zu senden. Es sind also Anwendungen, die sich selbst ausstrahlen (nicht Computer) und nicht automatisch (Anwendungen müssen sich explizit ausstrahlen). Ist es richtig?

  4. Wie genau kann sich meine Bewerbung ausstrahlen? Kann ich die Befehlszeile verwenden, um einen Dienst zu registrieren? (damit alle Anwendungen, die Bonjour verwenden, wissen, dass ein neuer Dienst angezeigt wird)?

  5. Außerdem hätte ich gerne eine Anwendung, die das von Bonjour erstellte IP-Netzwerk nutzt. Dazu muss meine Anwendung wissen, welche Geräte / Dienste im Netzwerk vorhanden sind. Genauer gesagt, muss meine Anwendung eine Liste von Diensten haben. Jeder Dienst in der Liste sollte einen Namen, die IP-Adresse, unter der er ausgeführt wird, und den Port, der von der Anwendung verwendet wird, haben. Kann Bonjour diese Informationen in irgendeiner Weise bereitstellen? Wenn es der Fall ist, wie genau es funktioniert. Wie kann mein Programm diese Informationen von Bonjour bekommen? Kann mein Programm eine Datei lesen, die von Bonjour erstellt wurde und die oben genannten Informationen enthält? Kann ich einige Befehle in der Befehlszeile verwenden, um diese Informationen abzurufen?

  6. Ich habe ein besonderes Interesse daran, auf Informationen über Dienste von Dateien, Umgebungsvariablen oder Befehlen in der Befehlszeile zuzugreifen. Diese Optionen scheinen mir die einfachsten zu sein! Da ich in diesem Fall keine zusätzlichen Bibliotheken verwenden muss, um mit Bonjour aus einer bestimmten Programmiersprache zu kommunizieren.

P.S. Bitte Fragen stellen, wenn etwas in meiner Frage nicht klar ist. Ich werde versuchen, meine Frage klarer zu formulieren.

P. P. S. Ich benutze Windows 7.

HINZUGEFÜGT: Ich plane, meine Anwendungen in PHP zu schreiben. Jeder Computer sollte einen Apache Webserver betreiben. Und ich möchte Bonjour verwenden, damit der Computer sich gegenseitig erkennt (Computer arbeiten in einem lokalen Netzwerk).


23
2018-03-03 09:23


Ursprung




Antworten:


  1. Ja. Stuart Cheshire, der der Schöpfer und Hauptbetreuer von Rendezvous / Bonjour bei Apple war, der auch die IETF ZeroConf-Arbeitsgruppe leitete und das O'Reilly Buch über Zero Configuration Networking schrieb, hat Bonjour als "drei- Legged Hocker "wo die Beine sind:

    1. IPv4 (und IPv6) Link-lokale Adressierung
    2. Multicast-Namensauflösung (mDNS)
    3. DNS-Dienst-Erkennung (DNS-SD)

    Die IETF ZeroConf-Arbeitsgruppe und Apple betrachten beide Link-lokale Adressierung, insbesondere IPv4 link-local Adressierung (169.254.0.0/16 Adressen), um Teil von ZeroConf / Bonjour zu sein, auch wenn die link-lokale Adressierung Jahre vor den anderen beiden "Beinen des Hockers" versandt wurde.

    Beachten Sie, dass viele Windows-Benutzer IPv4-Link-lokale Adressierung nicht als Teil von Bonjour / ZeroConf betrachten, da Windows bereits automatische link-lokale Adressierung unterstützt, ohne dass die Bonjour-Software von Apple installiert ist.

  2. Ja. Macs und Windows-Computer führen standardmäßig IPv4-Link-lokale Adressierung aus, wenn sie für DHCP konfiguriert sind, aber kein DHCP-Server verfügbar ist. Linux- und BSD-Maschinen mit Avahi (oder möglicherweise anderen ZeroConf-Implementierungen) werden dies ebenfalls tun.

  3. Wenn ein Computer Bonjour ausführt, wird sein Hostname über mDNS im LAN veröffentlicht. Wenn der Name Ihres Computers "Alice" ist, wird es sein Alice.local über mDNS. Von einem anderen Computer (nennen wir es "Bob") im selben LAN (speziell in derselben link-lokalen Multicast-Domäne) sollten Sie einfach tippen können ping Alice.localund Bob sollte eine mDNS-Suche durchführen Alice.local um die IP-Adresse (n) von Alice zu entdecken und die Adresse (n), die sie zurückbekommt, zu pingen.

    Beachten Sie jedoch, dass Bonjour zwischen Hostnamen und Servicenamen unterscheidet. Wenn Sie zum Beispiel zwei separate USB-Drucker haben, sagen wir "HP" und "Canon", die mit Alice verbunden sind, und Alice fungiert als, sagen wir, als lpr Druckserver für beide, sie können jeweils als eigene Dienste angezeigt werden, auf die zurückvermittelt wird Alice.local als der Gastgeber.

    Ihre Dienstnamen würden dem Benutzer als "HP" und "Canon" ohne Erwähnung von Alice angezeigt. Hinter den Kulissen würden sie als bekannt sein HP._printer._tcp.local und Canon._printer._tcp.localund DNS-SD-Lookups für diese Servicenamen würden anzeigen, dass diese Dienste verfügbar sind Alice.local auf zwei verschiedenen TCP-Ports.

    Also ja, Anwendungen müssen den Bonjour - Daemon (genannt mDNSResponder in der Implementierung von Apple), dass sie Dienste haben, die sie bewerben möchten. macOS verfügt über Mechanismen zur automatischen Verarbeitung von Service-Werbung für ältere Services, die nicht Bonjour-spezifisch sind. Zum Beispiel, MacOS sshd ist OpenSSH, die Bonjour nicht direkt unterstützt, aber macOS kümmert sich um die Werbung der ssh Service über Bonjour, damit Sie es einfach können ssh username@Alice.local von anderen Maschinen im LAN.

  4. Auf Mac OS gibt es ein Befehlszeilenprogramm "dns-sd", das einen Dienst mit dieser Syntax registrieren kann:

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

    Also zum Beispiel:

    dns-sd -R MyWebsite _http._tcp local 80
    

    Ich wäre nicht überrascht, wenn es in Bonjour für Windows oder dem Bonjour SDK für Windows enthalten ist, oder wenn Sie es für Windows von Apple kompilieren können mDNSResponder Open-Source-Projekt. Googeln für dns-sd.exeIch sehe, dass so etwas existiert. Ich bin mir nicht sicher, ob ich nur eine Binärdatei herunterladen würde. Stattdessen würde ich versuchen, es von einem der oben erwähnten Pakete zu bekommen, oder es selbst aus den mDNSResponder-Projektquellen kompilieren.

  5. Sie können auch die dns-sd Befehlszeilen-Tool, um nach Diensten zu suchen und nachzuschlagen. Hier sehen Sie ein Beispiel für die Suche nach einem lokalen Webdienst:

    Suchen Sie nach lokalen Webdiensten mit -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
    

    Schau auf den, den ich will, "My Cool Web App", mit -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  
    

    Fragen Sie die IP-Adressen für MyWebServer.local mit ab -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  
    

    Beachten Sie in diesen Beispielen, dass Sie müssen Ctrl-C aus dem dns-sd Werkzeug. Andernfalls bleibt es für immer offen, überwacht ständig das Netzwerk und meldet Änderungen an den Ergebnissen der Abfrage, die Sie ausgegeben haben (z. B. Webserver, die im Netzwerk ankommen und gehen, während Sie mit einem -B Abfrage durchsuchen öffnen). Ich habe festgestellt, dass aus diesem und anderen Gründen die dns-sd Werkzeug ist nicht gut geeignet, um aus einem Skript aufgerufen zu werden. Vielleicht möchten Sie sich doch einmal die ZeroConf-Bibliotheken für Ihre bevorzugte Sprache ansehen.

Um eine Ihrer anderen Fragen zu beantworten, ist mir keine ZeroConf-Implementierung bekannt, die es Ihnen ermöglicht, Abfragen auszuführen und Ergebnisse zu erhalten, indem Sie nur Dateien lesen / schreiben. Die meisten Anwendungen, die Bonjour verwenden, tun dies, indem sie die APIs entweder direkt (C / C ++ / Obj-C / Swift-Anwendungen) oder über eine für die Sprache spezifische Bibliothek (interpretierte / Skriptsprachen) aufrufen.


48
2018-03-06 00:52



Beste Erklärung von Bonjour / Zeroconf, die ich gesehen habe. Sie sollten etwas zum Wikipedia-Artikel beitragen :) - Kamil Kisiel
Dies ist ziemlich vollständig wie es ist, aber wenn Sie möchten, wie DNS-Datensätze verwendet werden, nutzen Sie bitte stehlen von serverfault.com/questions/18565/... - andrewtj


Erstens, was genau Bonjour macht   (Bitte lesen Sie meine Vermutungen geschrieben   unten)? Hier habe ich das Bonjour herausgefunden   aktiviert die automatische Erkennung von   Computer, Geräte und Dienste auf IP   Netzwerke. Aber ich dachte es nicht   nur "entdeckt Geräte im IP-Netzwerk"   Es erstellt auch ein IP-Netzwerk durch   Zuweisen von IP-Adressen zu Geräten   wo Bonjour rennt. Habe ich recht?

Nicht ganz; Wie Jon betonte, wird DHCP (normalerweise) verwendet, um IP-Adressen zuzuordnen. Ähnlich wie gewöhnlicher DNS Domänennamen in IP-Adressen übersetzt, wird Bonjour verwendet, um temporäre Domänennamen (innerhalb des lokalen Netzwerks) an die IP-Adressen zu übersetzen, die sie bereitstellen.

Und ich vermisse immer noch die Essenz. Macht es   auf die folgende Weise arbeiten? Zuerst Ich   Geräte verbinden (zB Laptops)   physisch, so dass sie potenziell   können miteinander kommunizieren. Dann,   sagen wir, auf einigen Laptops habe ich   Bonjour läuft und dann, als   Konsequenz, diese Laptops weisen IP zu   Adressen an sie selbst in automatischer   Weg. Also, Laptops (wo Bonjour ist   Running) ein IP-Netzwerk aufbauen. Macht es   auf diese Weise arbeiten?

Nee; Die Laptops erhalten meist ihre IP-Adressen von einem lokalen DHCP-Server. Bonjour hilft ihnen einfach herauszufinden, welche Dienste die anderen anbieten können.

Oder ein Computer, auf dem Bonjour läuft   wird nicht als eine Dienstleistung und es betrachtet   sendet sich nicht nur weil   Bonjour läuft auf diesem Computer. ich   bedeuten, dass die Anwendungen ausgeführt werden   Die Computer müssen Bonjour verwenden   Sendung selbst. So ist es   Anwendungen, die sich selbst ausstrahlen   (nicht Computer) und es ist nicht getan   automatisch (Anwendung muss   Broadcast selbst). Ist es   Recht?

Ja - im Allgemeinen muss Ihre Anwendung explizit auf ihre Existenz hinweisen. Dies kann oft mit vom System bereitgestellten Bibliotheken (häufig unter OS X) oder benutzerdefinierten Bibliotheken (z. B. Perl Net :: Bonjour) geschehen.

Wie genau kann meine Bewerbung?   Sendung selbst? Kann ich Befehl verwenden?   Linie, um einen Dienst zu registrieren (so dass   Alle Anwendungen, die Bonjour verwenden, wissen es   dass ein neuer Dienst erschien)

Ich kenne kein Befehlszeilentool, das dies tut, aber viele große Programmiersprachen verfügen über Bibliotheken, um dies zu tun.

Außerdem hätte ich gerne eine   Anwendung, die das IP-Netzwerk verwenden   erstellt von Bonjour. Dafür mein   Anwendung muss wissen, welche   Geräte / Dienste sind in der   Netzwerk. Genauer gesagt, mein   Anwendung muss eine Liste von haben   Dienstleistungen. Jeder Dienst in der Liste   sollte einen Namen haben, die IP-Adresse   wo es läuft und der Port welcher   wird von der Anwendung verwendet. Können   Bonjour liefert diese Information in   irgendwie?

Die meisten Bonjour-Bibliotheken sollten dies für Sie tun können; siehe das erste Beispiel unter http://search.cpan.org/~chlige/Net-Bonjour-0.96/lib/Net/Bonjour.pm

Wenn es der Fall ist, wie genau es ist   funktioniert. Wie kann mein Programm das bekommen?   Informationen von Bonjour? Kann mein   Programm lese eine Datei, die von erstellt wurde   Bonjour und enthält die oben genannten   erwähnte Information? Kann ich etwas benutzen?   Befehle in der Befehlszeile zum Abrufen   diese Information?

Mit den entsprechenden Bibliotheken verwendet das Programm das Bonjour-Protokoll, um alle anderen Computer in Ihrem lokalen Netzwerk zu fragen, welche Dienste verfügbar sind. Diese Bibliothek analysiert dann die Antworten und präsentiert sie Ihnen in einem nützlicheren Format.

Ich habe ein besonderes Interesse am Zugang   die Informationen über Dienstleistungen von   Dateien, Umgebungsvariablen oder   Befehle in der Befehlszeile. Diese   Optionen scheint mir der zu sein   einfachste! Da in diesen Fällen ich nicht   müssen zusätzliche Bibliotheken verwenden   mit Bonjour von a   bestimmte Programmiersprache.

Mir ist kein Tool bekannt, das das tut, aber es könnte existieren.

P.S. Bitte stellen Sie Fragen, wenn etwas   ist nicht klar in meiner Frage. ich werde   versuche meine Frage in einem mehr zu formulieren   klarer Weg.

Einige weitere Informationen darüber, was das Programm, das Sie schreiben, tun, und in welcher Sprache Sie es schreiben, würde es einfacher machen, zu helfen.

Für weitere einführende Informationen versuchen Sie beide:


4
2018-03-05 12:58



Caelyx, habe ich die von dir gewünschte Information am Ende meiner ursprünglichen Frage hinzugefügt. - Roman
caelyx, du hast geschrieben, dass Bonjour keine IP-Adressen zuweist: "DHCP (normalerweise) wird verwendet, um IP-Adressen zuzuordnen". Aber Bonjour implementiert das ZeroConf-Protokoll und eine der Kerntechnologien des ZeroConf-Protokolls (laut Wikipedia) ist "Zuweisung numerischer Netzwerkadressen für vernetzte Geräte (link-local address autoconfiguration)". - Roman
In IPv4-Netzwerken ohne DHCP / BootP-Server ordnen sich die Hosts 168. * -Adressen zu. Bonjour funktioniert ordnungsgemäß mit diesen Adressen. Entweder das oder es bezieht sich auf IPv6 Link-Local-Adressen. - jdizzle


Bonjour vergibt keine IP-Adressen - es ist ein Entdeckungsprotokoll - Sie noch DHCP / Static / Link-Local (APIPA) IP-Adressen müssen für sie arbeiten.

Es verwendet Multicast-DNS (mDNS), um zu ermitteln, welche Hosts sich in derselben Broadcast-Domäne wie er selbst befinden, und im Wesentlichen wird es ein eigener DNS-Server.

Sehen Bonjour & Zeroconf für den Überblick.

Wenn Ihre Anwendung nicht für ein Heim- / nicht verwaltetes Netzwerk gedacht ist, dh wenn Ihnen ein lokaler DNS-Server fehlt, brauchen Sie ihn nicht.


3
2018-03-03 10:11



ZeroConf weist keine IP Adressen zu? - Gobliins