Come usare Bonjour?


26
  1. In primo luogo, cosa fa esattamente Bonjour (per favore leggi le mie ipotesi scritte qui sotto)?
    Qui ho scoperto che Bonjour consente il rilevamento automatico di computer, dispositivi e servizi su reti IP. Ma ho pensato che non solo "scopre i dispositivi sulla rete IP", ma crea anche una rete IP assegnando gli indirizzi IP ai dispositivi su cui è in esecuzione Bonjour. Ho ragione?

  2. E mi manca ancora l'essenza. Funziona nel modo seguente? Innanzitutto collego i dispositivi (ad esempio i laptop) fisicamente in modo che potenzialmente possano comunicare tra loro. Quindi, diciamo, su alcuni laptop ho Bonjour in esecuzione e, di conseguenza, questi laptop assegnano loro gli indirizzi IP in modo automatico. Quindi, i laptop (dove è in esecuzione Bonjour) costruiscono una rete IP. Funziona in questo modo?

  3. O potrebbe essere un computer che esegue Bonjour non è considerato come un servizio e non si trasmette da solo perché Bonjour è in esecuzione su questo computer. Voglio dire che le applicazioni in esecuzione sui computer devono utilizzare Bonjour per trasmettere se stesse. Quindi, sono le applicazioni che si trasmettono da sole (non i computer) e non vengono eseguite automaticamente (l'applicazione deve trasmettere se stesse in modo esplicito). È giusto?

  4. In che modo esattamente la mia applicazione può trasmettere se stessa? Posso usare la riga di comando per registrare un servizio (in modo che tutte le applicazioni che utilizzano Bonjour sappiano che è apparso un nuovo servizio)?

  5. Inoltre, vorrei avere un'applicazione che utilizza la rete IP creata da Bonjour. Per questo la mia applicazione deve sapere quali dispositivi / servizi sono presenti nella rete. Più in dettaglio, la mia applicazione deve avere un elenco di servizi. Ogni servizio nell'elenco dovrebbe avere un nome, l'indirizzo IP in cui è in esecuzione e la porta utilizzata dall'applicazione. Bonjour può fornire queste informazioni in qualche modo? In tal caso, come funziona esattamente. In che modo il mio programma può ottenere queste informazioni da Bonjour? Il mio programma può leggere alcuni file creati da Bonjour e contenenti le informazioni di cui sopra? Posso usare alcuni comandi nella riga di comando per recuperare queste informazioni?

  6. Ho un interesse speciale ad accedere alle informazioni sui servizi da file, variabili di ambiente o comandi nella riga di comando. Queste opzioni mi sembrano le più semplici! Dato che in questi casi non ho bisogno di utilizzare librerie aggiuntive per comunicare con Bonjour da un particolare linguaggio di programmazione.

PS: Poni delle domande se qualcosa non è chiaro nella mia domanda. Proverò a formulare la mia domanda in un modo più chiaro.

PPS Uso Windows 7 .

AGGIUNTO: ho intenzione di scrivere le mie applicazioni in PHP. Ogni computer dovrebbe eseguire un server Web Apache. E voglio usare Bonjour per aiutare il computer a scoprirsi (i computer stanno lavorando in una rete locale).

Risposte:


54
  1. Sì. Stuart Cheshire, che è stato il creatore ed è uno dei principali manutentori di Rendezvous / Bonjour presso Apple, che ha anche co-presieduto il gruppo di lavoro IETF ZeroConf e ha scritto il libro O'Reilly su Zero Configuration Networking, ha descritto Bonjour come un “tre- sgabello con gambe "dove sono le gambe:

    1. Indirizzamento link-local IPv4 (e IPv6)
    2. Risoluzione dei nomi multicast (mDNS)
    3. DNS Service Discovery (DNS-SD)

    Il gruppo di lavoro IETF ZeroConf e Apple considerano entrambi l'indirizzamento link-local, in particolare l'indirizzamento link-local IPv4 ( 169.254.0.0/16indirizzi) come parte di ZeroConf / Bonjour, sebbene l'indirizzamento link-local sia stato spedito anni prima delle altre due "gambe dello sgabello".

    Si noti che poiché Windows supporta già l'indirizzamento locale dei collegamenti automatico anche senza l'installazione del software Bonjour per Windows di Apple, molti utenti Windows non ritengono che l'indirizzamento dei collegamenti locali IPv4 faccia parte di Bonjour / ZeroConf.

  2. Sì. Mac e macchine Windows, per impostazione predefinita, eseguono l'indirizzamento IPv4 locale-collegamento se sono configurati per DHCP ma non è disponibile alcun server DHCP. Anche le macchine Linux e BSD con Avahi (o eventualmente altre implementazioni ZeroConf) lo faranno.

  3. Se un computer esegue Bonjour, il nome host viene pubblicato sulla LAN tramite mDNS. Se il nome della tua macchina è "Alice", sarà Alice.localtramite mDNS. Da un altro computer (chiamiamolo "Bob") sulla stessa LAN (in particolare, sullo stesso dominio multicast link-local), dovresti essere in grado di digitare ping Alice.locale Bob dovrebbe fare una ricerca mDNS Alice.localper scoprire l'indirizzo IP di Alice ( es) e esegui il ping (uno) degli indirizzi restituiti.

    Si noti, tuttavia, che Bonjour distingue tra nomi host e nomi di servizi. Ad esempio, se hai due stampanti USB separate, diciamo "HP" e "Canon", collegate ad Alice, e Alice agisce come, diciamo, un lprserver di stampa per entrambi, ognuno può presentarsi come proprio servizio , che viene mappato Alice.localcome host.

    I nomi dei loro servizi verrebbero mostrati all'utente come "HP" e "Canon" senza menzione di Alice. Dietro le quinte, sarebbero noti come HP._printer._tcp.locale Canon._printer._tcp.locale le ricerche DNS-SD su quei nomi di servizio mostrerebbero che tali servizi sono disponibili Alice.localsu due diverse porte TCP.

    Quindi sì, le applicazioni devono notificare al demone Bonjour (chiamato mDNSRespondernell'implementazione di Apple) che hanno servizi che vogliono pubblicizzare. macOS ha meccanismi per gestire automaticamente la pubblicità del servizio per i servizi legacy che non sono nativamente consapevoli di Bonjour. Ad esempio, macOS sshdè OpenSSH, che non supporta direttamente Bonjour, ma macOS si occupa di pubblicizzare il sshservizio tramite Bonjour in modo che tu possa semplicemente ssh username@Alice.localda altre macchine sulla LAN.

  4. Su macOS, c'è uno strumento da riga di comando "dns-sd" che può registrare un servizio usando questa sintassi:

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

    Quindi per esempio:

    dns-sd -R MyWebsite _http._tcp local 80
    

    Non sarei sorpreso se è incluso in Bonjour per Windows o Bonjour SDK per Windows o se è possibile compilarlo per Windows dal progetto open source mDNSResponder di Apple . Cercando su Google dns-sd.exe, vedo che esiste una cosa del genere. Non sono sicuro che avrei semplicemente scaricato un binario per questo. Invece, proverei a ottenerlo da uno dei pacchetti sopra menzionati, o lo compilo da me stesso dalle fonti del progetto mDNSResponder.

  5. Puoi anche usare lo dns-sdstrumento da riga di comando per cercare servizi e cercarli. Ecco un esempio di come cercare un servizio Web locale:

    Cerca servizi Web locali con -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
    

    Cerca quello che voglio, "My Cool Web App", con -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  
    

    Interroga gli indirizzi IP per MyWebServer.local, con -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  
    

    Nota in questi esempi che è necessario Ctrl-Cutilizzare lo dns-sdstrumento. Altrimenti rimarrà aperto per sempre, controllando continuamente la rete e segnalando eventuali cambiamenti nei risultati della query emessa (come i server Web che vanno e vengono sulla rete, mentre ci si siede con una -Bquery di esplorazione aperta). Ho scoperto che per questo e altri motivi, lo dns-sdstrumento non è adatto per essere richiamato da uno script. Potresti voler vedere quali sono le librerie ZeroConf per la tua lingua preferita dopo tutto.

Per rispondere a una delle tue altre domande, non sono a conoscenza di alcuna implementazione ZeroConf che ti consenta di eseguire query e ottenere risultati semplicemente leggendo / scrivendo file. La maggior parte delle app che usano Bonjour lo fanno chiamando le API direttamente (app C / C ++ / Obj-C / Swift) o attraverso una libreria specifica per la lingua (linguaggi interpretati / di scripting).


La migliore spiegazione di Bonjour / Zeroconf che ho visto. Dovresti contribuire in parte all'articolo di Wikipedia :)
Kamil Kisiel

Questo è abbastanza completo com'è ma se desideri ampliare il modo in cui vengono utilizzati i record DNS, non esitare a rubare da serverfault.com/questions/18565/…
andrewtj

4

In primo luogo, cosa fa esattamente Bonjour (per favore leggi le mie ipotesi scritte qui sotto)? Qui ho scoperto che Bonjour consente il rilevamento automatico di computer, dispositivi e servizi su reti IP. Ma ho pensato che non solo "scopre i dispositivi sulla rete IP", ma crea anche una rete IP assegnando gli indirizzi IP ai dispositivi su cui è in esecuzione Bonjour. Ho ragione?

Non proprio; come ha sottolineato Jon, DHCP (di solito) viene utilizzato per allocare gli indirizzi IP. Allo stesso modo in cui il normale DNS traduce i nomi di dominio in indirizzi IP, Bonjour viene utilizzato per tradurre i nomi di dominio temporanei (all'interno della rete locale) negli indirizzi IP che li forniscono.

E mi manca ancora l'essenza. Funziona nel modo seguente? Innanzitutto collego i dispositivi (ad esempio i laptop) fisicamente in modo che potenzialmente possano comunicare tra loro. Quindi, diciamo, su alcuni laptop ho Bonjour in esecuzione e, di conseguenza, questi laptop assegnano loro gli indirizzi IP in modo automatico. Quindi, i laptop (dove è in esecuzione Bonjour) costruiscono una rete IP. Funziona in questo modo?

No; è probabile che i laptop ottengano i loro indirizzi IP da un server DHCP locale. Bonjour li aiuta a capire quali servizi ciascuno può fornire agli altri.

O potrebbe essere un computer che esegue Bonjour non è considerato come un servizio e non si trasmette da solo perché Bonjour è in esecuzione su questo computer. Voglio dire che le applicazioni in esecuzione sui computer devono utilizzare Bonjour per trasmettere se stesse. Quindi, sono le applicazioni che si trasmettono da sole (non i computer) e non vengono eseguite automaticamente (l'applicazione deve trasmettere se stesse in modo esplicito). È giusto?

Sì, in genere l'applicazione dovrà pubblicizzare esplicitamente la sua esistenza. Questo può spesso essere fatto usando le librerie fornite dal sistema (comuni su OS X) o le librerie personalizzate (ad esempio Net :: Bonjour di perl).

In che modo esattamente la mia applicazione può trasmettere se stessa? Posso usare la riga di comando per registrare un servizio (in modo che tutte le applicazioni che utilizzano Bonjour sappiano che è apparso un nuovo servizio)

Non sono a conoscenza di uno strumento da riga di comando che lo faccia, ma molti dei principali linguaggi di programmazione hanno librerie disponibili per farlo.

Inoltre, vorrei avere un'applicazione che utilizza la rete IP creata da Bonjour. Per questo la mia applicazione deve sapere quali dispositivi / servizi sono presenti nella rete. Più in dettaglio, la mia applicazione deve avere un elenco di servizi. Ogni servizio nell'elenco dovrebbe avere un nome, l'indirizzo IP in cui è in esecuzione e la porta utilizzata dall'applicazione. Bonjour può fornire queste informazioni in qualche modo?

La maggior parte delle biblioteche Bonjour dovrebbe essere in grado di farlo per te; vedi il primo esempio su http://search.cpan.org/~chlige/Net-Bonjour-0.96/lib/Net/Bonjour.pm

In tal caso, come funziona esattamente. In che modo il mio programma può ottenere queste informazioni da Bonjour? Il mio programma può leggere alcuni file creati da Bonjour e contenenti le informazioni di cui sopra? Posso usare alcuni comandi nella riga di comando per recuperare queste informazioni?

Utilizzando le librerie appropriate, il programma utilizza il protocollo Bonjour per chiedere a tutti gli altri computer della rete locale di comunicargli quali servizi hanno a disposizione. La libreria analizzerà quindi le risposte e le presenterà in un formato più utile.

Ho un interesse speciale ad accedere alle informazioni sui servizi da file, variabili di ambiente o comandi nella riga di comando. Queste opzioni mi sembrano le più semplici! Dato che in questi casi non ho bisogno di utilizzare librerie aggiuntive per comunicare con Bonjour da un particolare linguaggio di programmazione.

Non sono a conoscenza di uno strumento che lo fa, ma potrebbe esistere.

PS: Poni delle domande se qualcosa non è chiaro nella mia domanda. Proverò a formulare la mia domanda in un modo più chiaro.

Qualche informazione in più su ciò che farà il programma che stai scrivendo e in quale lingua lo stai scrivendo, renderebbe più semplice il tuo aiuto.

Per ulteriori informazioni introduttive, prova entrambi:


caelyx, ho aggiunto le informazioni richieste da te alla fine della mia domanda originale.
Roman

caelyx, hai scritto che Bonjour non assegna indirizzi IP: "DHCP (di solito) viene utilizzato per allocare gli indirizzi IP". Ma Bonjour implementa il protocollo ZeroConf e una delle tecnologie chiave del protocollo ZeroConf (secondo la Wikipedia) è "Assegnazione di indirizzi di rete numerici per dispositivi di rete (autoconfigurazione dell'indirizzo locale-collegamento)".
Roman

Sulle reti IPv4 senza server DHCP / BootP, gli host assegneranno a se stessi un indirizzo 168. *. Bonjour funziona correttamente con quegli indirizzi. O quello o si riferisce agli indirizzi Link-Local IPv6.
jdizzle

3

Bonjour non assegna indirizzi IP - è un protocollo di individuazione - sono ancora necessari indirizzi IP DHCP / Static / Link-Local (APIPA) affinché funzioni.

Utilizza il DNS multicast (mDNS) per scoprire quali host si trovano sullo stesso dominio di trasmissione di se stesso ed essenzialmente diventa il proprio server DNS.

Vedi Bonjour e Zeroconf per il basso.

A meno che l'applicazione non sia per una rete domestica / non gestita, vale a dire, in mancanza di un server DNS locale non è necessario.


ZeroConf non assegna indirizzi IP?
Gobliins
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.