1 个不稳定版本
0.1.1 | 2023年10月7日 |
---|---|
0.1.0 |
|
#1473 in 解析器实现
2,344 每月下载量
85KB
2K SLoC
BitTorrent peer ID注册/解析器/(即将)编码器
按照惯例,BitTorrent客户端通过向追踪器和其它客户端发送的peer ID来识别自己和版本。不幸的是,没有统一的客户端/版本编码,所以随着时间的推移,不同的客户端采用了不同的惯例,这使得解析peer ID变得困难。这个crate提供了一个全面的peer ID解析器和所有已知BitTorrent客户端的注册。
Peer ID编码是直接目标之一,请参阅下方的“路线图”以获取详细信息。
此crate使用tdyne_peer_id
来编码peer ID。
示例
use tdyne_peer_id::PeerId;
use tdyne_peer_id_registry::parse;
let peer_id = PeerId::from(b"-TR404Z-*\x00\x01d7xkqq04n");
let parsed = parse(peer_id).expect("recognised peer ID");
assert_eq!(parsed.client, "Transmission");
let version = parsed.version
.expect("valid version encoding")
.expect("Transmission does encode a version in its peer ID");
assert_eq!(version, "4.0.4 (Dev)");
当前状态
- 已在TORRENTDYNE生产环境中使用
- 与Webtorrent的
bittorrent-peerid
进行测试,这是最流行的BitTorrent peer ID解析的JS实现 - 通过识别更多客户端和版本改进了
bittorrent-peerid
- 定期进行模糊测试以验证没有panic发生
路线图
编码peer ID
一个只接受已知客户端(在发布模式下)并从peer ID格式中排除选择的peer ID格式化API将有助于生态系统的更一致性。
与Transmission进行测试
Transmission有一个广泛的peer ID解析器。目前,tdyne_peer_id_registry
和Transmission可以处理的客户端的交集是两个相交的圆圈。它需要接近两个同心圆。
结构化无分配API
tdyne_peer_id_registry
被设计成解析为一个无分配的树形结构体和枚举。在当前版本中,该树形结构尚未公开,因为它还不稳定,修改它将导致不兼容的更改。相反,API 会立即将树形结构转换为字符串,这是最低的共同分母。然而,直接公开树形结构将有助于需要从对等方ID操作信息的项目,因为它们可以直接与结构体一起工作,而不是重新解析字符串。
许可证
您可以选择以下任一许可证:[Apache License, Version 2.0](https://github.com/torrentdyne/tdyne-peer-id-registry/blob/05bd09fdd31950d2c6b592fb043ad43d15459a67/LICENSE-APACHE) 或 [MIT license](https://github.com/torrentdyne/tdyne-peer-id-registry/blob/05bd09fdd31950d2c6b592fb043ad43d15459a67/LICENSE-MIT)。除非您明确声明,否则根据 Apache-2.0 许可证定义,您提交给此软件包的任何有意贡献都将双重许可,如上所述,不附加任何额外条款或条件。
依赖项
约145KB