案例
pyatv:逆向工程实现的 Apple TV 与 AirPlay 协议客户端
基于 asyncio 的 Python 库和命令行工具,通过重新实现 DMAP/DACP、Media Remote Protocol、Companion Link、AirPlay 和 RAOP 协议,充当 Apple TV 与 AirPlay 设备的独立客户端;其协议文档称这些协议均经逆向工程得出。该文档记录了恢复出的二进制格式、Zeroconf 属性、OPACK 编码、pair-setup 与 pair-verify 交互以及 Companion 命令,其中部分请求头取自 iPhone Remote 应用的 Wireshark 抓包;附带的 atvproxy 可中继 MRP、Companion 和 AirPlay 会话并打印解密后的消息,供进一步分析。在此基础上,pyatv 提供遥控、带推送更新的元数据、应用与账户切换、音频输出管理,以及向 Apple TV、HomePod 和第三方接收器的 AirPlay 推流。
使用条件与局限
- 审阅时的版本为 0.18.0,于 2026-06-19 同时发布到 GitHub 和 PyPI,主要为兼容新版 tvOS;所审阅的 master 分支提交即发布提交,而 v0.18.0 标签指向另一个并行提交,两者仅在 CHANGES.md 和 pyatv/const.py 上有差异。协议文档只涵盖已逆向得出的内容:Companion Link 一节自称大多是推测和猜想,OPACK 的描述并不完整且未经验证,MRP 的实现一节仍标为待定。致谢页称 MRP 支持建立在 Jean Regisser 的 mediaremotetv-protocol 研究成果之上。
- 仓库未附带任何 Apple 软件、固件或密钥。pyatv 连接使用者自己在局域网中的 Apple TV、HomePod、AirPort Express 或其他 AirPlay 接收器;多数协议需要用设备上显示的 PIN 配对,凭据和设置保存在 pyatv 的存储中。tvOS 15 及更高版本因 MRP 已移入 AirPlay 2 数据流,必须先设置好 AirPlay;RAOP 仅支持旧式配对。
- 需要 Python 3.9+,可从 PyPI 或项目的容器镜像安装;安装指南列出在 Debian 类系统上构建依赖所需的 build-essential、libssl-dev、libffi-dev 和 Python 头文件,RAOP 音频推流依赖 miniaudio。CI 在 Ubuntu、macOS 和 Windows 上以 Python 3.9 至 3.14 运行。
- 测试以单元测试为主,另有针对 DMAP、MRP、Companion、RAOP、mDNS 和扫描的功能测试;据测试指南,这些测试连接的模拟设备只实现有限功能,且仅求与 pyatv 兼容。它们不能证明与 Apple 实现的一致性;atvproxy 也被描述为处于孵化阶段、依赖内部 API 的脚本。本次审阅未运行测试,也未连接设备。
- 采用 MIT 许可(LICENSE.md)。Apple 的协议、设备和软件保留其各自权利;pyatv 是独立实现,并非恢复出的 Apple 源码。所审阅的来源未表明使用了 REA 或 AI。
关于此条目
- 类型
- 案例
- 类别
- 独立重建案例
- 关联
- 独立重建项目
- 目标
- 协议
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- docs/documentation/protocols.md GitHub · postlund/pyatv · 修订 b277a4c
- README.md GitHub · postlund/pyatv · 修订 b277a4c
- docs/documentation/protocols.md#L13-L18 GitHub · postlund/pyatv · 修订 b277a4c
- docs/documentation/protocols.md#L363-L375 GitHub · postlund/pyatv · 修订 b277a4c
- docs/documentation/atvproxy.md GitHub · postlund/pyatv · 修订 b277a4c
- docs/documentation/supported_features.md GitHub · postlund/pyatv · 修订 b277a4c
- docs/documentation/documentation.md GitHub · postlund/pyatv · 修订 b277a4c
- docs/internals/testing.md GitHub · postlund/pyatv · 修订 b277a4c
- docs/support/acknowledgements.md GitHub · postlund/pyatv · 修订 b277a4c
- .github/workflows/tests.yml GitHub · postlund/pyatv · 修订 b277a4c
- pyproject.toml GitHub · postlund/pyatv · 修订 b277a4c
- CHANGES.md GitHub · postlund/pyatv · 修订 b277a4c
- LICENSE.md GitHub · postlund/pyatv · 修订 b277a4c
- https://github.com/postlund/pyatv/releases/tag/v0.18.0
- https://pypi.org/project/pyatv/0.18.0/
同分区更多条目:协议
- Wireshark 协议分析工具 · 工具
- Netzob 协议建模与推断框架 · 工具
- Scapy 报文分析与构造工具 · 工具
- Universal Radio Hacker(URH)无线协议分析工具 · 工具
- SavvyCAN CAN 总线分析工具 · 工具
- AALpy 自动机学习库 · 工具