我正在学习比特洪流协议,有一个问题我不太确定。
根据BEP009,
磁铁URI格式
磁铁URI格式为:
v1:磁铁:?xt=urn:btih:info散列&dn=名称&tr=跟踪器url
v2:磁铁:?xt=urn:btmh:标记的信息散列&dn=名称&tr=跟踪器url
info hash是信息哈希十六进制编码,共40个字符。为了与现有的野生链接兼容,客户端还应该支持32个字符的base32编码信息哈希。
标记的信息哈希是新元数据格式的种子的多哈希格式、十六进制编码的完整信息哈希。'如果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中解码?
Magnet Link中的信息哈希与UDP Tracker所需的信息哈希相同(torrent的bencoded"info"字典的20字节SHA-1哈希(。
此外,UDP跟踪器根本不使用弯曲编码的数据,只使用字节!不过HTTP/HTTP跟踪器使用Bencoded格式。
您可以搜索一些像libtorrent这样的开源代码。它是由C++编写的,所以您需要阅读bdecode和bencode部分。这部分并不复杂,然后您可以自己编写python代码。
如果我错了,请纠正我,但是urn:btih:407AEA6F3D7DC846879449B24CA3F57DB280DE5C是信息哈希从磁铁链接,我需要解码它才能获得诸如BEP015中列出的bencoded元数据。例如:下载、离开、上传、事件等
Infohash是一个唯一的SHA1哈希,用于标识torrent。因此,它不能被进一步解码以获得任何进一步的信息,它只是一个标识符。此外,如果你仔细想想,如果链接包含这些信息,就会不断地需要更改。
您必须在向跟踪器发出的公告请求中使用此infohash。公告请求的目的是让跟踪器知道你正在下载特定的哈希,你已经下载了多远,并为你提供跟踪器知道的对等方。
在您的示例中,有两个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。