在Zeroconf/Bonjour上发布最简单的方法?

2024-04-29 21:40:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些应用程序想用zeroconf显示出来。

  1. 有没有一个简单的脚本化的方法来做到这一点?
  2. 我的网络管理员需要做些什么来启用它吗?

Python或sh比较好。欢迎对Linux和OSX提出特定于操作系统的建议


Tags: 方法脚本应用程序linuxsh建议osx网络管理员
3条回答

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()

我推荐pybonjour

或者你可以使用bash:

dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...]

这在OSX上默认工作。对于其他*尼克斯,请参阅avahi-publish手册页(您可能需要通过首选的包管理器安装该手册页)。

相关问题 更多 >