Normalmente, cada máquina que oferece um serviço executará um daemon Zeroconf e os clientes procurarão por isso na rede. Nesta caixa Debian, por exemplo, existe um processo chamado avahi-daemon
. Para anunciar um serviço, um programa fala com o daemon. Uma maneira fácil de fazer isso é com o programa avahi-publish
, que registra um serviço com o daemon:
avahi-publish -s myservice _http._tcp 12345 "Here it is"
Até esse programa terminar, avahi-browse
irá encontrá-lo:
$ avahi-browse -t _http._tcp
= eth0 IPv4 myservice Web Site local
hostname = [mymachine.local]
address = [192.168.1.123]
port = [12345]
txt = ["Here it is"]
Na maioria das vezes você não vai querer rodar um programa separado apenas para publicar o serviço, então seu daemon terá um pouco de código para fazer isso. Aqui estão alguns bons exemplos de como fazer isso em Python. Há uma função simples que você chama assim:
# Downloaded from http://stackp.online.fr/?p=35
# Thanks to Pierre
#
from ZeroconfService import ZeroconfService
import time
service = ZeroconfService(name="Joe's awesome FTP server",
port=3000, stype="_ftp._tcp")
service.publish()
Novamente, na maioria das vezes, você não precisa executar o avahi-browse, porque o navegador provavelmente pode encontrar essas coisas por si só. O Safari pode no Mac, por exemplo - procure o menu "Bonjour".
Você também pode encontrar máquinas usando o zeroconf. Minha máquina é endereçável usando o domínio .local
:
ssh mymachine.local
funcionará mesmo que a máquina não esteja no DNS. Muito útil para uma rede doméstica!