如何转换torrent信息哈希刮?

时间:2010-07-17 15:44:22

标签: php hash bittorrent tracker

我有来自磁铁链接的洪流哈希。例如:fda164e7af470f83ea699a529845a9353cc26576 当我试图获取有关leechers和peer的信息时,我应该要求:http://tracker.publicbt.com/scrape?info_hash= ??? 我该如何转换此请求的信息哈希?是网址编码还是编码?怎么样?用PHP。

3 个答案:

答案 0 :(得分:3)

这是一个原始的十六进制表示。使用pack()H进行转换。然后对URL进行编码。

答案 1 :(得分:1)

从同事那里得到了这个python代码段,

r = ''
s = 'fda164e7af470f83ea699a529845a9353cc26576'
for n in range(0, len(s), 2):
    r += '%%%s' % s[n:n+2].upper()
print r

产出:%FD%A1%64%E7%AF%47%0F%83%EA%69%9A%52%98%45%A9%35%3C%C2%65%76

像魅力一样。

编辑:工具就像一个魅力,让追踪器回复状态200(确定),但仍然不能检索洪流详细信息......

答案 2 :(得分:1)

如果有人遇到麻烦并且将来会遇到这个问题:整个问题的诀窍是使用PHP: sha1函数的bool $raw_output参数,将其设置为“true”。

可以找到BDecode / DEncode类HERE。这个名为Trackon的项目还包括许多其他有用的类,可以与torrent跟踪器和文件进行交互。

因此,在PHP中,类似这样的东西可以获取正确的信息哈希来抓取跟踪器的详细信息:

include('./path/to/BDecode.php');
include('./path/to/BEncode.php');

function getHash($torFile){
    $tfile = BDecode(file_get_contents($torFile));
    $infohash = sha1(BEncode($tfile["info"]), TRUE);

    return urlencode($infohash);
}

然后只是这样称呼它:

$hash = getHash('./path/to/.torrent');

希望这有助于那里的人。在阅读了很多关于如何获取正确信息哈希的帖子后,我仍然在摸不着头脑。我理解为什么现在没有提到这个,但是这个参数是在PHP 5中添加的。如果你没有运行PHP 5,你必须在计算之后将sha1哈希转换为原始二进制。