解码 Torrent 跟踪器抓取的 Torrent Hash?
Posted
技术标签:
【中文标题】解码 Torrent 跟踪器抓取的 Torrent Hash?【英文标题】:Decode Torrent Hash of Torrent tracker scrape? 【发布时间】:2014-05-26 09:27:32 【问题描述】:我正在使用 BEncoded php Library 解码来自 Bittorrent 跟踪器的编码响应。
Tracker 的响应是:
d5:filesd20:¼€™rÄ2ÞÊþVA .]á^¦d8:completei285e10:downloadedi22911e10:incompletei9eeee
使用以下代码解码后:
require 'bencoded.php';
$be = new BEncoded;
//Response saved in scrape.txt
$data =file_get_contents('scrape.txt');
print_r($be->Decode($data));
输出是:
Array ( [files] => Array ( [¼€™rÄ2ÞÊþVA .]á^¦] => Array ( [complete] => 285 [downloaded] => 22911 [incomplete] => 9 [isDct] => 1 ) [isDct] => 1 ) [isDct] => 1 )
我的问题 我在上述输出中的问题是如何解码输出中的那些神秘字母。
【问题讨论】:
这里可以直接看到tracker的回复exodus.desync.com:6969/scrape/… 【参考方案1】:user3690414 发布的链接:http://wiki.vuze.com/w/Scrape 几乎解释了不同键的含义。
解释原始的编码字符串:
d5:filesd20:¼€™rÄ2ÞÊþVA .]á^¦d8:completei285e10:downloadedi22911e10:incompletei9eeee
您需要了解 Bencoding 的工作原理:https://wiki.theory.org/BitTorrentSpecification#Bencoding
这里最重要的是要知道,编码字典中的每个条目都是 Key,Value-pair。 其中 Key 是 字节字符串 和 Value 以下类型之一:byte string、integer、list 或 dictionary。
考虑到这一点,原始字符串可以这样分解:
d // The first d indicates the start of the Root dictionary
5:files // that has a Key with a 5 byte string name 'files',
d // the value of the 'files'-key is a second dictionary
20:¼€™rÄ2ÞÊþVA .]á^¦ // that has a Key 20 byte = 160 bit big endian SHA1 info-hash
d // the value of that key is a third dictionary
8:complete // that has a Key with a 8 byte string name 'complete',
i285e // the value of that key is a Integer=285
10:downloaded // that has a Key with a 10 byte string name 'downloaded',
i22911e // the value of that key is a Integer=22911
10:incomplete // that has a Key with a 10 byte string name 'incomplete',
i9e // the value of that key is a Integer=9
e // this e indicates the end of the third dictionary
e // this e indicates the end of the second dictionary
e // this e indicates the end of the Root dictionary
希望这有助于理解“bencoded.php”的输出。
编辑。
如果您想制作 160 位大端 SHA1 信息哈希 [¼€™rÄ2ÞÊþVA .]á^¦]
更易于阅读,我建议您将其输出为 40 字节的十六进制编码字符串:0xBC801B9D9972C432DECAFE56410F092E5DE15EA6
【讨论】:
所以必须将其转换为 40 字节的十六进制编码字符串才能使其可读,对吧?【参考方案2】:如果您指的是 files
数组的损坏键,那么它是原始的 infohash - 查看规范:
【讨论】:
但是如何正确显示呢? @Proger_XP以上是关于解码 Torrent 跟踪器抓取的 Torrent Hash?的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中对 torrent 跟踪器的 HTTP 请求