【发布时间】:2010-12-27 07:48:15
【问题描述】:
我有一些应用想通过 zeroconf 显示。
- 是否有一种简单的可编写脚本的方法来执行此操作?
- 我的网络管理员需要做些什么来启用此功能吗?
Python 或 sh 会更好。欢迎针对 Linux 和 OS X 提出针对操作系统的建议。
【问题讨论】:
我有一些应用想通过 zeroconf 显示。
Python 或 sh 会更好。欢迎针对 Linux 和 OS X 提出针对操作系统的建议。
【问题讨论】:
pybonjour 似乎没有得到积极维护。我正在使用python-zeroconf。
pip install zeroconf
这是我用来向 iOS 设备宣布Twisted-Autobahn WebSocket 的脚本的摘录:
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()
【讨论】:
或者你可以只使用 bash:
dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...]
这在 OS X 上默认工作。对于其他 *nixes,请参阅 avahi-publish 手册页(您可能需要通过您喜欢的包管理器安装)。
【讨论】:
我推荐pybonjour。
【讨论】:
通过Avahi Python bindings,很简单。
【讨论】: