-
Sim. Stuart Cheshire, que foi o criador e principal mantenedor do Rendezvous / Bonjour na Apple, que também co-presidiu o grupo de trabalho IETF ZeroConf, e escreveu o livro O'Reilly sobre Zero Configuration Networking, descreveu Bonjour como um banquinho de pernas ", onde as pernas são:
- Endereçamento de link local local IPv4 (e IPv6)
- Resolução de nomes de multidifusão (mDNS)
- Descoberta de serviço DNS (DNS-SD)
O grupo de trabalho IETF ZeroConf e Apple consideram endereçamento link-local, especialmente endereçamento IPv4 link-local (
169.254.0.0/16
endereços) para fazer parte do ZeroConf / Bonjour, apesar do endereçamento link-local ter sido enviado anos antes dos outros dois. pernas das fezes ”.Observe que, como o Windows já oferece suporte ao endereçamento local de link automático, mesmo sem o software Bonjour for Windows da Apple instalado, muitos usuários do Windows não consideram o endereçamento local do link IPv4 parte do Bonjour / ZeroConf.
-
Sim. Máquinas Mac e Windows, por padrão, fazem o endereçamento local de link IPv4 se estiverem configuradas para DHCP, mas não há servidor DHCP disponível. Máquinas Linux e BSD com Avahi (ou possivelmente outras implementações ZeroConf) instaladas também farão isso.
-
Se um computador estiver executando o Bonjour, seu nome de host será publicado na LAN via mDNS. Se o nome da sua máquina for "Alice", será
Alice.local
via mDNS. De outro computador (vamos chamá-lo de “Bob”) na mesma LAN (especificamente, no mesmo domínio multicast link-local), você deve simplesmente digitarping Alice.local
, e Bob deve fazer uma pesquisa mDNS deAlice.local
para descobrir o (s) endereço (s) IP de Alice, e pingar (um) o (s) endereço (s) de volta.Note, no entanto, que o Bonjour diferencia entre nomes de host e nomes de serviço. Por exemplo, se você tem duas impressoras USB separadas, digamos “HP” e “Canon”, conectadas a Alice, e Alice está agindo como, digamos, um servidor de impressão
lpr
para ambas, elas podem aparecer como seu próprio serviço, que mapeia de volta paraAlice.local
como host.Seus nomes de serviço apareceriam para o usuário como "HP" e "Canon" sem mencionar Alice. Nos bastidores, eles seriam conhecidos como
HP._printer._tcp.local
eCanon._printer._tcp.local
, e as pesquisas DNS-SD nesses nomes de serviço mostrariam que esses serviços estão disponíveis emAlice.local
em duas portas TCP diferentes.Então, sim, os aplicativos devem notificar o daemon Bonjour (chamado
mDNSResponder
na implementação da Apple) de que eles têm serviços que desejam anunciar. O macOS tem mecanismos para manipular automaticamente o anúncio de serviço para serviços legados que não são nativamente compatíveis com o Bonjour. Por exemplo, osshd
do macOS é o OpenSSH, que não suporta diretamente o Bonjour, mas o macOS cuida de anunciar o serviçossh
via Bonjour, para que você possa apenasssh [email protected]
de outras máquinas na LAN. -
No macOS, há uma ferramenta de linha de comando "dns-sd" que pode registrar um serviço usando esta sintaxe:
dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...] # (Register a service)
Então, por exemplo:
dns-sd -R MyWebsite _http._tcp local 80
Eu não ficaria surpreso se ele fosse incluído no Bonjour para Windows, ou no Bonjour SDK para Windows, ou se você pudesse compilá-lo para o Windows a partir da mDNSResponder projeto de código aberto. Pesquisando por
dns-sd.exe
, vejo que isso existe. Não tenho certeza se eu faria o download de um binário para ele. Em vez disso, eu tentaria obtê-lo de um dos pacotes mencionados acima, ou compilá-lo das fontes do projeto mDNSResponder. -
Você também pode usar a ferramenta de linha de comando
dns-sd
para procurar serviços e pesquisá-los. Aqui está um exemplo de procurar um serviço da Web local:Procure serviços da Web locais com
-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
Procure o que eu quero, "My Cool Web App", com
-L
:$ dns-sd -L "My Cool Web App" _http._tcp local Lookup My Cool Web App._http._tcp.local 16:31:52.678 My2Cool2Web2App._http._tcp.local. can be reached at MyWebServer.local.:80 (interface 6) ^C
Consulte os endereços IP para MyWebServer.local, com
-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
Observe nesses exemplos que você deve
Ctrl-C
da ferramentadns-sd
. Caso contrário, ele permanecerá aberto para sempre, observando continuamente a rede e relatando quaisquer alterações nos resultados da consulta que você emitiu (como servidores da Web indo e vindo na rede, enquanto você se senta com uma consulta-B
browse aberta). Descobri que, por essa e por outras razões, a ferramentadns-sd
não é adequada para ser chamada por um script. Você pode querer olhar para o que as bibliotecas ZeroConf para o seu idioma preferido, afinal.
Para responder a uma de suas outras perguntas, não conheço nenhuma implementação do ZeroConf que permita realizar consultas e obter resultados apenas lendo / escrevendo arquivos. A maioria dos aplicativos que usam o Bonjour chamam as APIs diretamente (aplicativos C / C ++ / Obj-C / Swift) ou por meio de uma biblioteca específica para o idioma (linguagens interpretadas / de script).