跳转到主要内容

纯Python组播DNS服务发现库(与Bonjour/Avahi兼容)

项目描述

python-zeroconf-py2compat

这是pyzeroconf的一个分支,一个Python的组播DNS服务发现库,最初由Paul Scott-Murphy编写(https://github.com/paulsm/pyzeroconf),随后由William McBrine修改(https://github.com/wmcbrine/pyzeroconf),并在0.19.1标签的基础上进一步修改(最后支持Py2.7)由Jamie Alexandre完成(https://github.com/learningequality/python-zeroconf)。

兼容性

  • Bonjour

  • Avahi

与一些其他的Zeroconf/Bonjour/Avahi Python包相比,python-zeroconf

  • 不依赖于Bonjour或Avahi

  • 不使用D-Bus

  • 不强制你使用特定的事件循环或Twisted

  • 可以通过pip安装

Python兼容性

  • CPython 2.7, 3.3+

  • PyPy 2.2+(可能也包括1.9-2.1)

  • PyPy3 2.4+

版本控制

本项目的版本遵循以下模式:MAJOR.MINOR.PATCH。

  • MAJOR版本目前为0

  • MINOR版本在向后不兼容的更改时递增

  • PATCH版本在向后兼容的更改时递增

状态

有一些人正在使用这个包。我并不积极使用它,因此我所能提供的任何关于任何问题的帮助都非常有限。

如何获取python-zeroconf-py2compat?

安装python-zeroconf-py2compat最简单的方法是使用pip

pip install zeroconf-py2compat

如何使用它?

以下是一个查找服务的示例

from six.moves import input
from zeroconf import ServiceBrowser, Zeroconf


class MyListener(object):

    def remove_service(self, zeroconf, type, name):
        print("Service %s removed" % (name,))

    def add_service(self, zeroconf, type, name):
        info = zeroconf.get_service_info(type, name)
        print("Service %s added, service info: %s" % (name, info))


zeroconf = Zeroconf()
listener = MyListener()
browser = ServiceBrowser(zeroconf, "_http._tcp.local.", listener)
try:
    input("Press enter to exit...\n\n")
finally:
    zeroconf.close()

如果你不知道需要查找的服务的名称,尝试

from zeroconf import ZeroconfServiceTypes
print('\n'.join(ZeroconfServiceTypes.find()))

更多示例请参阅示例目录。

变更日志

0.19.16

  • 修复阻止TXT记录通过ServiceBrowser更新的问题

0.19.15

  • 跟踪所有请求的广播接口,而不仅仅是成功附加的接口

0.19.14

  • 从get_all_addresses()返回的列表中排除以“169.254”开头的地址

0.19.13

  • 将某些应保留的assert使用转换为python -O时可能持久的存在

  • 将接口附加从Zeroconf.__init__中分离出来,成为一个单独的方法_add_interfaces

  • 添加了删除接口的相应行为,类似于_add_interfaces的功能,但相反

  • 公开了新的公共方法Zeroconf.update_interfaces,它触发接口的添加或删除

  • 阻止因网络不可达而发生的错误报告堆栈跟踪,errno.ENETUNREACH

  • 更新Zeroconf.send以接受一个interface,在它上过滤发送消息的接口,这样在接口被删除时可以尝试发送添加/删除消息

0.19.10

减少(并使配置可用的)_GLOBAL_DONE线程等待时间以改进发现

0.19.9

将_GLOBAL_DONE转换为线程Event,以便在关闭时更好地中断

0.19.8

在接口枚举中处理异常,并仅返回一个空列表

0.19.7

从ifaddr回滚到ifcfg

0.19.6

从ifcfg切换到ifaddr进行地址枚举

0.19.5

通过pyjnius添加对Android的支持

0.19.4

提供enum兼容性

0.19.3

  • 修复setup.py,以便实际上包含zeroconf.py!

0.19.2(learningequality/python-zeroconf-py2compat中的第一个发布版本)

  • 将基于C的netifaces替换为纯Python的ifcfg以提高可移植性

  • 允许DNS A记录地址由出站接口IP确定

  • 当‘stale’时刷新ServiceBrowser条目(从0.20.0回滚)

  • 在新条目中首先添加新记录,而不是最后(从0.20.0回滚)

  • 修复在DNSRecord子类中损坏的__eq__(从0.20.0回滚)

  • 修复已发布服务的TTL处理,并使用RFC6762(从0.21.0回滚)

  • 修复循环后的UnboundLocalError(从0.21.0回滚)

  • 修复UTF-8多字节名称压缩(从0.21.0版本回滚)

  • 修复日志调用(从0.21.0版本回滚)

  • 修复在关闭时未发送服务移除数据包(从0.22.0版本回滚)

  • MyListener回调在服务TXT记录变更时(从0.23.0版本回滚)

0.19.1

  • 允许使用netifaces >= 0.10.6进行安装(我们关心的一个错误已修复)

0.19.0

0.18.0

  • 放弃对Python 2.6的支持

  • 改进关闭Zeroconf对象时执行的代码中的错误处理

0.17.7

  • 更好地处理DNS传入数据包解析异常

  • 许多异常现在将在第一次出现时记录警告

  • 捕获和记录sendto()错误

  • 修复/实现重复名称更改

  • 修复在0.17.6中引入的过度严格的名称验证

  • 极大地改进处理超大数据包,包括

    • 根据RFC1035实现名称压缩

    • 根据RFC6762限制生成的数据包大小为9000字节

    • 更好地处理过大的传入数据包

  • 将测试覆盖率提高到95%

0.17.6

  • 许多改进以解决ZC()启动和关闭期间的竞争条件和异常,归功于:morpav、veawor、justingiorgi、herczy、stephenrauch

  • 添加更多测试覆盖率:strahlex、stephenrauch

  • Stephen Rauch做出贡献

    • 加速浏览器启动

    • 添加ZeroconfServiceTypes()查询类以发现所有广告服务类型

    • 对服务名称、类型和子类型进行完全验证

    • 修复子类型浏览问题

    • 修复DNSHInfo支持问题

0.17.5

  • 修复了OpenBSD兼容性问题,感谢Alessio Sergi

  • 修复了ServiceBrowser启动时的竞争条件,感谢gbiddison

  • 修复了一些Python 3系统上的安装问题,感谢Per Sandström

  • 修复了Python 3上的“迭代期间大小更改”错误,感谢gbiddison

0.17.4

  • 修复了对Linux内核版本< 3.9的支持,感谢Giovanni Harting和Luckydonald,GitHub拉取请求#26

0.17.3

  • 修复了Python 3上的DNSText表示,感谢Paulus Schoutsen提供的补丁,GitHub拉取请求#24

0.17.2

  • 修复了Python 3.4.3+上的安装问题(由于enum34依赖项无法安装,改为依赖enum-compat;感谢Michael Brennan提供的原始补丁,GitHub拉取请求#22)

0.17.1

  • 修复了在Windows上尝试使用虚拟网络接口时的EADDRNOTAVAIL错误,感谢daid

0.17.0

  • 添加了一些Python依赖项,因此不再为零依赖项

  • 改进异常处理(现在会更安静)

  • 默认情况下,使用所有可用的网络接口监听和发送消息(可配置);感谢Marcus Müller

  • 开始更自由地使用日志记录

  • 修复了二进制字符串作为属性值时转换为False的错误(https://github.com/jstasiak/python-zeroconf/pull/10);感谢Dr. Seuss

  • 添加了新的ServiceBrowser事件处理器接口(请参阅示例)

  • PyPy3现在正式支持

  • 修复了Python 3上的ServiceInfo表示,感谢Yordan Miladinov

0.16.0

  • 设置Python日志记录并开始使用它

  • 清理了代码样式(包括从驼峰式命名法迁移到蛇形命名法)

0.15.1

  • 修复了处理关闭套接字(GitHub #4)

0.15

  • 由Jakub Stasiak分叉

  • 使Python 3兼容

  • 添加了安装脚本,使其可通过pip安装并上传到PyPI

  • 设置Travis构建

  • 重新格式化代码并移动文件

  • 停止在几个地方捕获BaseException,这可能导致隐藏错误

  • 将线程标记为守护线程,它们现在不会保持应用程序运行

0.14

  • 修复了某些系统上SOL_IP未定义的错误 - 感谢Mike Erdely。

  • 清理了示例。

  • 将模块名称转换为小写。

0.13

  • 各种小改动;请参阅git获取详细信息。

  • 不再与Python 2.2兼容。仅测试过2.5-2.7版本。

  • 由William McBrine分支。

0.12

  • 允许选择绑定接口

  • 错别字修正 - 感谢A. M. Kuchling

  • 删除了所有“Rendezvous”一词的使用 - 这是一个API更改

0.11

  • 对addListener方法的注释进行了修正

  • 支持从OS X看到的新的记录类型 - IPv6地址 - hostinfo

  • 忽略未知DNS记录类型

  • 对名称解码进行了修复

  • 与其他使用端口5353(例如,在Mac OS X上)的进程协同工作

  • 与Mac OS X 10.3.2的mDNSResponder进行了测试

  • 对服务浏览器列表条目的删除进行了修正

0.10

  • Jonathon Paisley贡献了这些修正

    • 即使查询是单播的,也会始终进行多播回复

    • 纠正了一个指针编码问题

    • 现在可以以任何顺序写入记录

    • 在失败时显示跟踪信息

    • 更好的TXT记录解析

    • 服务器现在与名称分开

    • 可以取消服务浏览器

  • 修改了一些单元测试以适应这些更改

0.09

  • 在服务注销时删除所有记录

  • 修复了readName的DOS安全问题

0.08

  • 将许可协议更改为LGPL

0.07

  • 在引擎上更快地关闭

  • 出站名称的指针编码

  • ServiceBrowser现在正常工作

  • 添加了新的单元测试

0.06

  • 单元测试中的小改进

  • 添加了定义的异常类型

  • 新的样式对象

  • 修复了主机名/接口问题

  • 修复了套接字超时问题

  • 修复了add_service_listener()的错别字错误

  • 使用select()进行套接字读取

  • 在Debian不稳定版上使用Python 2.2.2进行了测试

0.05

  • 确保域名大小写不敏感

  • 支持单播DNS查询

0.04

  • 添加了一些单元测试

  • 在需要的地方添加了__ne__附加程序

  • 确保名称以“.local.”结尾

  • 在接收套接字上设置超时以进行干净的关闭

许可协议

LGPL,有关详细信息,请参阅COPYING文件。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于安装软件包的信息。

源分布

zeroconf-py2compat-0.19.17.tar.gz (46.8 kB 查看哈希值)

上传时间

构建分布

zeroconf_py2compat-0.19.17-py2.py3-none-any.whl (42.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者