如何使用zeroconf?

Rom*_*man 4 networking local-area-network wlan

我是否在命令行中运行它?我是否将其作为 GUI 应用程序运行?我认为它通过本地网络发现可用资源并为资源分配地址。接下来发生什么?此信息是否已写入某个我可以由其他应用程序读取的文件?我可以将 zeroconf 生成的地址放入浏览器的地址行并到达 Web 服务器(在 Web 服务器正在资源上运行的情况下)吗?

Pet*_*ake 6

通常,每台提供服务的机器都会运行一个 Zeroconf 守护进程,客户端将在网络上搜索它。例如,在这个 Debian 机器上,有一个名为avahi-daemon. 为了宣传服务,程序与守护程序进行对话。一个简单的方法是使用程序avahi-publish,它向守护进程注册一个服务:

avahi-publish -s myservice _http._tcp  12345 "Here it is"
Run Code Online (Sandbox Code Playgroud)

直到那个程序终止,avahi-browse才会发现:

$ 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"]
Run Code Online (Sandbox Code Playgroud)

大多数情况下,您不想运行单独的程序来发布服务,因此您的守护程序将有一些代码来完成它。这里有一些很好的例子,说明如何在 Python 中做到这一点。有一个简单的函数,您可以这样调用:

# 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()
Run Code Online (Sandbox Code Playgroud)

同样,大多数时候您不必运行 avahi-browse,因为您的浏览器可能会自己找到这些东西。例如,Safari 可以在 Mac 上 - 查找“Bonjour”菜单。

您还可以使用 zeroconf 查找机器。我的机器可以使用.local域寻址:

ssh mymachine.local
Run Code Online (Sandbox Code Playgroud)

即使机器不在 DNS 中也能工作。对于家庭网络非常有用!