我正在学习bittorrent协议,并且有一个我不太确定的问题。
据BEP009称,
磁铁URI格式 磁铁URI格式是: magnet:?xt=urn:btih:info-hash&dn=name&tr=tracker-url :v1 magnet:?xt=urn:btmh:tagged-info-hash&dn=name&tr=tracker-url :v2 info-散列是编码的信息散列十六进制,共有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.
我的问题是,我如何在蟒蛇中解码?
发布于 2020-05-07 15:07:59
Magnet中的info-散列与UDP跟踪器所需的信息散列相同(洪流中的20字节SHA-1散列编码"info“字典)。
此外,UDP跟踪器根本不使用便条编码数据,只使用字节!不过,HTTP/HTTPs跟踪器使用的是本编码格式。
发布于 2020-05-13 11:59:18
您可以搜索一些开源代码,比如激流。它是由C++编写的,所以您需要阅读bdecode和bencode部分。这个部分并不复杂,然后您可以自己编写python代码。
发布于 2020-07-12 08:57:17
如果我错了,请纠正我,但是urn:btih:407AEA6F3D7DC846879449B24CA3F57DB280DE5C是磁铁链接中的信息散列,我需要对它进行解码,才能获得像在BEP015中列出的这样一个经过本编码的元数据。例如:下载,左,上传,事件等。
Info散列是标识洪流的唯一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因此,这些是您必须通过实现protocol.html向其发送通知请求的跟踪器。
请注意,这不会给您任何有关torrent文件的信息,因为您需要实现BEP-9。
https://stackoverflow.com/questions/61640538
复制相似问题