python mDNS应该安装哪个库
时间: 2023-07-05 09:26:38 浏览: 104
Python中有两个流行的mDNS库:
1. `zeroconf`库:这是一个纯Python实现的mDNS库,可以用于服务发现和解析。它支持广告服务、发现服务和查询服务,易于使用和部署。你可以使用pip安装它:`pip install zeroconf`
2. `python-avahi`库:这是一个基于Avahi守护进程的Python绑定库,支持在Linux系统上运行的mDNS解析和发现。你可以使用pip安装它:`pip install python-avahi`
这两个库都是很好的选择,具体使用哪个库取决于你的需求和操作系统。如果你需要在Linux系统上运行mDNS服务,那么`python-avahi`库是一个不错的选择。如果你需要在其他平台上运行mDNS服务,那么`zeroconf`库是个好的选择。
相关问题
mdns 服务器 python语言实现
以下是一个简单的 Python 实现,它可以作为一个基本的 MDNS 服务器:
```python
import socket
# 设置 MDNS 服务器的 IP 地址和端口号
mdns_server = '224.0.0.251'
mdns_port = 5353
# 创建 UDP 套接字并绑定到 MDNS 服务器的 IP 地址和端口号
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((mdns_server, mdns_port))
# MDNS 查询响应
response = b'\x00\x00\x84\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x08_test._tcp\x05local\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\x00\x3c\x00\x04\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00'
# 监听 MDNS 请求并处理请求
while True:
data, addr = sock.recvfrom(1024)
query = data[12:].decode('utf-8').strip()
if query == '_test._tcp.local':
sock.sendto(response, (addr[0], mdns_port))
```
这个程序创建了一个 UDP 套接字并绑定到 MDNS 服务器的 IP 地址和端口号。然后程序不断监听 MDNS 请求,当收到请求时,检查是否是 "_test._tcp.local" 的查询请求,如果是,则向请求者发送一个 MDNS 响应。这个响应是一个二进制数据,它包含了一些 MDNS 查询响应的必要信息,比如查询类型和 TTL 等。
python 新版本 mDNS库 ServiceInfo 类的构造函数已经改变,不再接受 address 参数怎么解决
如果你使用的是新版本的 python mDNS 库,而你的代码中使用了旧版本的 ServiceInfo 类构造函数,并且传递了 `address` 参数,那么你可以通过以下两种方法解决此问题:
1. 使用新的 ServiceInfo 类构造函数
新版本的 ServiceInfo 类构造函数不再接受 `address` 参数,而是接受一个 `host` 参数,你可以将 `address` 参数的值作为 `host` 参数传递给构造函数。示例如下:
```python
from zeroconf import ServiceInfo
info = ServiceInfo(
"_http._tcp.local.",
"My Web Server._http._tcp.local.",
addresses=[socket.inet_aton("192.168.1.100")],
port=80,
properties={},
host="192.168.1.100"
)
```
2. 降级到旧版本的 python mDNS 库
如果你的代码中使用了很多旧版本的 ServiceInfo 类构造函数,并且修改起来比较麻烦,那么你可以考虑降级到旧版本的 python mDNS 库。你可以通过 `pip` 命令安装指定版本的库,示例如下:
```shell
pip install zeroconf==0.30.0
```
这样就可以安装旧版本的 zeroconf 库了。但是请注意,降级到旧版本可能会导致其他问题,请谨慎使用。