0

我正在学习 bittorrent 协议并且有一个我不太确定的问题。

根据BEP009

磁铁 URI 格式

磁铁 URI 格式为:

v1: 磁铁:?xt=urn:btih:info-hash&dn=name&tr=tracker-url

v2: 磁铁:?xt=urn:btmh:tagged-info-hash&dn=name&tr=tracker-url

info-hash是十六进制编码的 info-hash,总共 40 个字符。为了与现有链接兼容,客户端还应支持 32 个字符的 base32 编码信息哈希。

tagged-info-hash是多哈希格式、十六进制编码的完整信息哈希,用于新元数据格式的种子。'btmh' 和 'btih' 确切的主题可能存在于同一个磁体中,如果它们描述相同的混合种子。

示例磁铁链接:magnet:?xt=urn:btih:407AEA6F3D7DC846879449B24CA3F57DB280DE5C&dn=ubuntu-educationpack_14+04_all&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969

如果我错了,请纠正我,但urn:btih:407AEA6F3D7DC846879449B24CA3F57DB280DE5C来自info-hash磁铁链接,我需要对其进行解码才能获得bencoded元数据,例如BEP015中列出的元数据。诸如:downloaded, left, uploaded, event, etc.

我的问题是,如何在 python 中解码?

4

3 回答 3

0

Magnet Link 中的 info-hash 与 UDP Tracker 所需的 info-hash 相同(20 字节的 SHA-1 哈希编码的 torrent 的“info”字典)。

此外,UDP Tracker 根本不使用编码数据,只使用字节!但是 HTTP/HTTPS 跟踪器使用 Bencoded 格式。

于 2020-05-07T15:07:59.490 回答
0

如果我错了,请纠正我,但 urn:btih:407AEA6F3D7DC846879449B24CA3F57DB280DE5C 是来自磁力链接的信息哈希,我需要对其进行解码才能获得 BEP015 中列出的编码元数据。比如:下载、离开、上传、事件等。

Infohash 是标识种子的唯一 SHA1 哈希。因此它不能被进一步解码以获得任何进一步的信息,它只是一个标识符。此外,如果您考虑一下,如果包含此信息,链接将需要不断更改。

您必须在对跟踪器的宣布请求中使用此信息哈希。宣布请求的目的是让跟踪器知道您正在下载特定的哈希,您已经走了多远,并为您提供跟踪器知道的对等点。

在您的示例中,有两个 UDP 跟踪器:

tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969

在对这些进行 URL 解码后,它们变为:

tr=udp://tracker.opentrackr.org:1337/announce&tr=udp://explodie.org:6969

因此,这些是您必须通过实施https://libtorrent.org/udp_tracker_protocol.html将您的宣布请求发送到的跟踪器

请注意,它不会为您提供有关 torrent 文件的任何信息,因为您需要实施 BEP-9。

于 2020-07-12T08:57:17.033 回答
0

您可以搜索一些开源代码,例如libtorrent。它是由 C++ 编写的,因此您需要阅读 bdecode 和 bencode 部分。那部分并不复杂,然后就可以自己写python代码了。

于 2020-05-13T11:59:18.253 回答