Skip to content

Come utilizzare Bonjour?

La guida o il codice passo-passo che troverai in questo articolo è la soluzione più rapida ed efficace che abbiamo trovato a questa preoccupazione o problema.

Soluzione:

Soluzione 1:

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

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

    Il gruppo di lavoro IETF ZeroConf e Apple considerano entrambi l'indirizzamento link-local, in particolare l'indirizzamento IPv4 link-local (169.254.0.0/16 ) faccia parte di ZeroConf/Bonjour, anche se l'indirizzamento link-local è stato distribuito anni prima delle altre due "gambe dello sgabello".

    Poiché Windows supporta già l'indirizzamento link-local automatico anche senza il software Bonjour for Windows di Apple, molti utenti Windows non pensano che l'indirizzamento IPv4 link-local faccia parte di Bonjour/ZeroConf.

  2. Sì. I computer Mac e Windows, per impostazione predefinita, eseguono l'indirizzamento IPv4 link-local se sono configurati per il DHCP ma non è disponibile un server DHCP. Anche i computer Linux e BSD con Avahi (o eventualmente altre implementazioni di ZeroConf) lo faranno.

  3. Se un computer esegue Bonjour, il suo nome host viene pubblicato sulla LAN tramite mDNS. Se il nome della vostra macchina è "Alice", sarà Alice.local tramite mDNS. Da un altro computer (chiamiamolo "Bob") sulla stessa LAN (in particolare, sullo stesso dominio multicast link-local), si dovrebbe essere in grado di digitare semplicemente ping Alice.locale Bob dovrebbe effettuare una ricerca mDNS di Alice.local per scoprire gli indirizzi IP di Alice e pingare (uno) degli indirizzi ottenuti.

    Si noti, tuttavia, che Bonjour distingue tra nomi di host e nomi di servizi. Ad esempio, se si dispone di due stampanti USB separate, diciamo "HP" e "Canon", collegate ad Alice, e Alice si comporta come, ad esempio, un lpr per entrambe le stampanti, ognuna di esse può essere visualizzata come un proprio servizio, che si ricollega a Alice.local come host.

    I loro nomi di servizio verrebbero visualizzati dall'utente come "HP" e "Canon" senza alcun riferimento ad Alice. Dietro le quinte, sarebbero conosciuti come HP._printer._tcp.local e Canon._printer._tcp.locale le ricerche DNS-SD su questi nomi di servizio mostrerebbero che tali servizi sono disponibili su Alice.local su due porte TCP diverse.

    Quindi sì, le applicazioni devono notificare il demone Bonjour (chiamato mDNSResponder nell'implementazione di Apple) che hanno dei servizi che vogliono pubblicizzare. macOS ha dei meccanismi per gestire automaticamente la pubblicità dei servizi per i servizi legacy che non sono nativamente consapevoli di Bonjour. Ad esempio, il servizio sshd di macOS è OpenSSH, che non supporta direttamente Bonjour, ma macOS si occupa di pubblicizzare il servizio ssh tramite Bonjour, in modo che si possa semplicemente ssh [email protected] da altre macchine sulla LAN.

  4. Su macOS, esiste uno strumento a riga di comando "dns-sd" che può registrare un servizio utilizzando questa sintassi:

    dns-sd -R     [...]  
    # (Register a service)
    

    Quindi, ad esempio:

    dns-sd -R MyWebsite _http._tcp local 80
    

    Non mi sorprenderebbe se fosse incluso in Bonjour per Windows, o nel Bonjour SDK per Windows, o se fosse possibile compilarlo per Windows dal progetto open-source mDNSResponder di Apple. Cercare su Google dns-sd.exevedo che esiste una cosa del genere. Non sono sicuro che scaricherei semplicemente un binario. Cercherei invece di ottenerlo da uno dei pacchetti menzionati sopra o di compilarlo io stesso dai sorgenti del progetto mDNSResponder.

  5. Si può anche usare il file dns-sd per cercare i servizi e consultarli. Ecco un esempio di ricerca di un servizio web locale:

    Cercare i 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
    

    Cercare quello desiderato, "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  My32Cool32Web32App._http._tcp.local. can be reached at MyWebServer.local.:80 (interface 6)  
    ^C  
    

    Interrogare gli indirizzi IP di 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  
    

    In questi esempi, si noti che è necessario Ctrl-C fuori dal campo dns-sd altrimenti rimarrà aperto per sempre. Altrimenti rimarrà aperto per sempre, osservando continuamente la rete e segnalando qualsiasi cambiamento nei risultati della query emessa (come ad esempio server web che vanno e vengono dalla rete, mentre voi state seduti con una -B browse). Per questo e per altri motivi, ho scoperto che l'opzione dns-sd non è adatto a essere richiamato da uno script. Si consiglia di esaminare le librerie di ZeroConf per la lingua preferita.

Per rispondere a un'altra domanda, non sono a conoscenza di alcuna implementazione di ZeroConf che consenta di eseguire query e ottenere risultati semplicemente leggendo e scrivendo file. La maggior parte delle applicazioni che utilizzano Bonjour lo fanno chiamando le API, direttamente (applicazioni C/C++/Obj-C/Swift) o attraverso una libreria specifica per il linguaggio (linguaggi interpretati/scripting).

Soluzione 2:

Innanzitutto, cosa fa esattamente Bonjour
(leggete le mie ipotesi scritte
qui sotto)? Ho scoperto che Bonjour
consente la scoperta automatica di
computer, dispositivi e servizi sulle reti
IP. Ma ho pensato che non
scopre i dispositivi sulla rete IP".
crea anche una rete IP assegnando
assegnando indirizzi IP ai dispositivi
dove Bonjour è in esecuzione. Ho ragione?

Non chiuderee; come ha sottolineato Jon, il DHCP (di solito) viene utilizzato per assegnare gli indirizzi IP. Allo stesso modo in cui il DNS ordinario 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 ancora mi sfugge l'essenza. Funziona
funziona nel modo seguente? Per prima cosa
collegare i dispositivi (ad esempio i laptop)
fisicamente in modo che possano potenzialmente
comunicare tra loro. Poi,
diciamo che su alcuni computer portatili ho
Bonjour in esecuzione e quindi, di conseguenza
conseguenza, questi portatili assegnano indirizzi IP
indirizzi IP in modo automatico.
modo automatico. Quindi, i computer portatili (in cui è in esecuzione Bonjour)
in esecuzione) costruiscono una rete IP. Funziona
funziona in questo modo?

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

Oppure un computer che esegue Bonjour
non è considerato un servizio e non si
non si trasmette solo perché
Bonjour è in esecuzione su questo computer. I
Cioè che le applicazioni in esecuzione sui
computer devono utilizzare Bonjour per
trasmettersi. Quindi, sono le
applicazioni a trasmettere se stesse
(non i computer) e non viene fatto
automaticamente (le applicazioni devono
trasmettersi esplicitamente). È
giusto?

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

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

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

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

La maggior parte delle librerie Bonjour dovrebbe essere in grado di farlo; si veda il primo esempio in http://search.cpan.org/~chlige/Net-Bonjour-0.96/lib/Net/Bonjour.pm

Se è così, come funziona esattamente
funziona. Come può il mio programma ottenere queste
informazioni da Bonjour? Il mio programma può
programma può leggere un file creato da
Bonjour e contenente le informazioni
informazioni di cui sopra? Posso utilizzare alcuni
comandi nella riga di comando per recuperare
queste informazioni?

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

Ho un interesse particolare ad accedere
informazioni sui servizi da
file, variabili d'ambiente o
comandi nella riga di comando. Queste
opzioni mi sembrano le più
più semplici! Poiché in questo caso 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 faccia questo, ma potrebbe esistere.

P.S. Si prega di fare domande se qualcosa
non è chiaro nella mia domanda. Cercherò
cercherò di formulare la mia domanda in modo più
chiaro.

Qualche informazione in più su cosa farà il programma che state scrivendo e in quale linguaggio lo state scrivendo renderebbe più facile aiutarvi.

Per maggiori informazioni introduttive, provare entrambi:

  • le FAQ di Apple: http://developer.apple.com/networking/bonjour/faq.html
  • la pagina di Wikipedia: http://en.wikipedia.org/wiki/Bonjour_(software)

Soluzione 3:

Bonjour non assegna indirizzi IP - è un protocollo di scoperta - per funzionare ha bisogno di indirizzi IP DHCP/Statici/Link-Local (APIPA).

Utilizza il DNS multicast (mDNS) per scoprire quali host si trovano nel suo stesso dominio di trasmissione e, in sostanza, diventa il proprio server DNS.

Si veda Bonjour e Zeroconf per i dettagli.

A meno che la vostra applicazione non sia per una rete domestica/non gestita, cioè priva di un server DNS locale, non ne avete bisogno.

valutazioni e recensioni

Potete difendere il nostro lavoro mettendo un commento e valorizzandolo, vi ringraziamo.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.