mDNS(多播DNS)是一種用于在本地網絡上發現其他設備和服務的協議
在Ubuntu上,你需要安裝avahi-daemon
和libnss-mdns
這兩個軟件包。打開終端并運行以下命令來安裝它們:
sudo apt-get update
sudo apt-get install avahi-daemon libnss-mdns
編輯/etc/nsswitch.conf
文件,將hosts
行修改為包含mdns4_minimal
:
sudo nano /etc/nsswitch.conf
將以下內容添加到hosts
行:
hosts: files mdns4_minimal [NOTFOUND=return] dns
保存并退出。
avahi-daemon
服務:sudo systemctl restart avahi-daemon
你可以使用avahi-publish
命令注冊一個服務。例如,如果你想在本地網絡上注冊一個名為myservice
的服務,可以運行以下命令:
avahi-publish -s "My Service" _myservice._tcp 12345
這將在本地網絡上注冊一個名為My Service
的服務,使用TCP協議,端口號為12345。
要在本地網絡上發現服務,可以使用avahi-browse
命令。例如,要查找所有可用的_tcp
服務,可以運行以下命令:
avahi-browse -at _services._dns-sd._udp
這將顯示本地網絡上所有可用的服務。
你還可以使用Python的zeroconf
庫編寫mDNS客戶端和服務器。首先,安裝zeroconf
庫:
pip install zeroconf
然后,你可以參考以下示例代碼來實現mDNS客戶端和服務器:
from zeroconf import ServiceInfo, Zeroconf
desc = {'version': '0.1'}
info = ServiceInfo("_myservice._tcp.local.", "My Service._myservice._tcp.local.", socket.inet_aton("127.0.0.1"), 12345, 0, 0, desc)
zeroconf = Zeroconf()
zeroconf.register_service(info)
try:
while True:
time.sleep(0.1)
except KeyboardInterrupt:
pass
finally:
zeroconf.unregister_service(info)
zeroconf.close()
from zeroconf import ServiceBrowser, Zeroconf
class MyListener:
def remove_service(self, zeroconf, type, name):
print("Service %s removed" % (name,))
def add_service(self, zeroconf, type, name):
info = zeroconf.get_service_info(type, name)
print("Service %s added, service info: %s" % (name, info))
zeroconf = Zeroconf()
listener = MyListener()
browser = ServiceBrowser(zeroconf, "_myservice._tcp.local.", listener)
try:
while True:
time.sleep(0.1)
except KeyboardInterrupt:
pass
finally:
zeroconf.close()
這樣,你就可以在Ubuntu上使用mDNS進行設備間通信了。