Home > OS >  Simplest way to publish over Zeroconf/Bonjour?
Simplest way to publish over Zeroconf/Bonjour?

Time:08-12

I've got some apps I would like to make visible with zeroconf.

  1. Is there an easy scriptable way to do this?
  2. Is there anything that needs to be done by my network admin to enable this?

Python or sh would be preferrable. OS-specific suggestions welcome for Linux and OS X.

CodePudding user response:

pybonjour doesn't seem to be actively maintained. I'm using python-zeroconf.

pip install zeroconf

Here is an excerpt from a script I use to announce a Twisted-Autobahn WebSocket to an iOS device:

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

CodePudding user response:

Or you can just use bash:

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

This works by default on OS X. For other *nixes, refer to the avahi-publish man page (which you may need to install via your preferred package manager).

CodePudding user response:

I'd recommend pybonjour.

CodePudding user response:

Through the Avahi Python bindings, it's very easy.

  • Related