一、概述
Avahi-daemon 是一個自動發現本地網絡服務的系統,支持Zeroconf網絡協議,它可以通過DNS-SD協議實現網絡中各種服務的自動發現和解析,這樣在一個沒有DNS服務器的網絡中,可以輕鬆地共享文件、打印機、音頻設備等資源。
除了局域網內的服務發現功能之外,Avahi-daemon 也提供了分佈式服務發現的功能,這使得在廣域網內部署基礎設施變得更加容易。
二、安裝
Avahi-daemon 的安裝非常簡單,我們可以通過以下命令來完成:
sudo apt-get install avahi-daemon avahi-utils
三、配置
默認情況下,Avahi-daemon 的配置文件位於 /etc/avahi/avahi-daemon.conf,我們可以通過編輯這個文件來配置 Avahi-daemon。
一些最常見的配置選項如下:
- allow-interfaces:指定允許 Avahi-daemon 在哪些網卡接口上工作
- publish-addresses:指定 Avahi-daemon 是否發佈連接的 IP 地址作為站點信息
- use-ipv4:指定是否啟用 IPv4
- use-ipv6:指定是否啟用 IPv6
四、服務類型
在 Avahi-daemon 中,有很多不同類型的服務,其中使用最廣泛的服務類型如下:
- ssh:用來訪問遠程主機
- sftp-ssh:用來安全地傳輸文件
- http:用來提供網絡服務
- ftp:用來傳輸文件
- smb:用來共享文件和打印機
- printer:用來分享打印機
五、發佈服務
發佈服務需要啟動應用程序並告訴 Avahi-daemon 要發佈的服務類型和相關信息,以下是使用 Python 3 發佈 HTTP 服務實例的示例:
# 引入 Avahi 服務套件 import dbus import avahi # 獲取系統上的 Avahi-daemon bus = dbus.SystemBus() server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.Server) # 添加服務到 Avahi-daemon group = None service_type = "http" port = 80 name = "My HTTP Server" domain = "" host = socket.gethostbyname(socket.gethostname()) domain = domain.encode("latin-1") name = name.encode("utf-8") regtype = avahi.DBusString(service_type) domain = avahi.DBusString(domain) host = avahi.DBusString(host) target = avahi.DBusString("%s.local" % name) protocol = avahi.PROTO_UNSPEC if not group: group = avahi.ServiceGroup(server, name, regtype, domain, protocol, 0) group.AddService(avahi.IF_UNSPEC, protocol, 0, name, regtype, domain, host, avahi.uint16(port), avahi.string_array_to_txt_array(["path=/index.html"]), avahi.dict_to_txt_array({})) group.Commit()
六、瀏覽服務
使用 Avahi-browse 命令可以瀏覽當前網絡中的服務,例如,可以使用以下命令來查看所有的 HTTP 服務:
avahi-browse -t -r _http._tcp
原創文章,作者:HDFKH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/361195.html