【问题标题】:Simplest way to publish over Zeroconf/Bonjour?通过 Zeroconf/Bonjour 发布的最简单方法?
【发布时间】:2010-12-27 07:48:15
【问题描述】:

我有一些应用想通过 zeroconf 显示。

  1. 是否有一种简单的可编写脚本的方法来执行此操作?
  2. 我的网络管理员需要做些什么来启用此功能吗?

Python 或 sh 会更好。欢迎针对 Linux 和 OS X 提出针对操作系统的建议。

【问题讨论】:

    标签: python bonjour zeroconf


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      或者你可以只使用 bash:

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

      这在 OS X 上默认工作。对于其他 *nixes,请参阅 avahi-publish 手册页(您可能需要通过您喜欢的包管理器安装)。

      【讨论】:

      • @bjoernz 我已经更新了我的答案以反映链接腐烂。
      【解决方案3】:

      我推荐pybonjour

      【讨论】:

      【解决方案4】:

      通过Avahi Python bindings,很简单。

      【讨论】:

      • 不幸的是我不知道。
      • 它只是 avahi,在 Linux 和大多数 BSD 上运行。
      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2011-10-28
      相关资源
      最近更新 更多