我有一些應用程序,我想使用zeroconf顯示。最簡單的方式發佈Zeroconf/Bonjour?
- 有沒有簡單的腳本方式來做到這一點?
- 有什麼需要通過我的網絡管理員來完成,以使這個?
Python或SH將preferrable。操作系統特定的建議歡迎Linux和OS X.
我有一些應用程序,我想使用zeroconf顯示。最簡單的方式發佈Zeroconf/Bonjour?
Python或SH將preferrable。操作系統特定的建議歡迎Linux和OS X.
或者,你可以使用bash:
dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...]
這是通過默認情況下在OS X上對於其他* nixes,請參閱avahi-publish手冊頁(你可能需要通過您的首選包管理器安裝) 。
通過Avahi Python bindings,這很容易。
是,只有Linux呢? – 2012-11-29 01:12:21
我不知道不幸。 – jldupont 2012-11-30 00:27:23
我建議pybonjour。
聽起來不錯。請注意,它目前[不支持Python 3.x - 請參閱問題#5](http://code.google.com/p/pybonjour/issues/detail?id=5)。 – 2012-11-29 01:11:12
上次發佈2009 ... – 2017-03-14 06:18:45
pybonjour似乎沒有積極維護。我正在使用python-zeroconf。
pip install zeroconf
下面是一個腳本我用它來宣佈Twisted-Autobahn WebSocket到iOS設備上的摘錄:
from zeroconf import ServiceInfo, Zeroconf
class WebSocketManager(service.Service, object):
ws_service_name = 'Verasonics WebSocket'
wsPort = None
wsInfo = None
def __init__(self, factory, portCallback):
factory.protocol = BroadcastServerProtocol
self.factory = factory
self.portCallback = portCallback
self.zeroconf = Zeroconf()
def privilegedStartService(self):
self.wsPort = reactor.listenTCP(0, self.factory)
port = self.wsPort.getHost().port
fqdn = socket.gethostname()
ip_addr = socket.gethostbyname(fqdn)
hostname = fqdn.split('.')[0]
wsDesc = {'service': 'Verasonics Frame', 'version': '1.0.0'}
self.wsInfo = ServiceInfo('_verasonics-ws._tcp.local.',
hostname + ' ' + self.ws_service_name + '._verasonics-ws._tcp.local.',
socket.inet_aton(ip_addr), port, 0, 0,
wsDesc, hostname + '.local.')
self.zeroconf.register_service(self.wsInfo)
self.portCallback(port)
return super(WebSocketManager, self).privilegedStartService()
def stopService(self):
self.zeroconf.unregister_service(self.wsInfo)
self.wsPort.stopListening()
return super(WebSocketManager , self).stopService()
「簡單解決方法」不再可用 – bjoernz 2017-02-21 09:51:30
@bjoernz我已更新我的答案以反映linkrot。 – Zack 2017-02-24 20:40:49