Question

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.

Was it helpful?

Solution

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

OTHER TIPS

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

I'd recommend pybonjour.

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top