我有一些应用程序,我想使可见的zeroconf。1.有没有一种简单的脚本化方法来实现这一点?1.我的网络管理员是否需要执行任何操作才能启用此功能?Python或sh是首选。欢迎为Linux和OSX提供特定于操作系统的建议。
olmpazwi1#
通过Avahi Python bindings,这非常简单。
nhjlsmyf2#
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()
lrpiutwd3#
或者您可以直接使用bash:
dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...]
这在OS X上默认工作。对于其他 * nix,请参阅avahi-publish手册页(您可能需要通过首选的包管理器安装)。
to94eoyn4#
我推荐pybonjour。
eivgtgni5#
编辑日期:2022年2月27日:我不能100%确定我写的内容是正确的,我最近试过了,虽然它运行了,但我不能通过mdns查询得到信息;这表明mDNS可能比预期的更复杂.....未完待续....如果这对您有效/无效,请留下评论。尽管this answer为您指出了正确的方向,但似乎python-zeroconf(0.39.4)做了一些更改,使上面的示例不再工作(对我来说)。另外,我认为一个更简单、更独立的答案会更好,所以这里有:
mdns
from zeroconf import ServiceInfo, Zeroconf PORT=8080 zeroconf = Zeroconf() wsInfo = ServiceInfo('_http._tcp.local.', "myhost._http._tcp.local.", PORT, 0, 0, {"random_key": "1234", "answer": "42"}) zeroconf.register_service(wsInfo) import time time.sleep(1000);
请注意,对于ServiceInfo(),PORT以外的任何内容都是可选的。您可以同时运行多个这样的程序;它们将毫无问题地全部绑定到相同的UDP端口。
ServiceInfo()
PORT
5条答案
按热度按时间olmpazwi1#
通过Avahi Python bindings,这非常简单。
nhjlsmyf2#
pybonjour似乎没有得到积极的维护,我使用的是python-zeroconf。
以下是我用来向iOS设备发布Twisted-Autobahn WebSocket的脚本摘录:
lrpiutwd3#
或者您可以直接使用bash:
这在OS X上默认工作。对于其他 * nix,请参阅avahi-publish手册页(您可能需要通过首选的包管理器安装)。
to94eoyn4#
我推荐pybonjour。
eivgtgni5#
编辑日期:2022年2月27日:我不能100%确定我写的内容是正确的,我最近试过了,虽然它运行了,但我不能通过
mdns
查询得到信息;这表明mDNS可能比预期的更复杂.....未完待续....如果这对您有效/无效,请留下评论。尽管this answer为您指出了正确的方向,但似乎python-zeroconf(0.39.4)做了一些更改,使上面的示例不再工作(对我来说)。
另外,我认为一个更简单、更独立的答案会更好,所以这里有:
请注意,对于
ServiceInfo()
,PORT
以外的任何内容都是可选的。您可以同时运行多个这样的程序;它们将毫无问题地全部绑定到相同的UDP端口。