我绝对是Bittorrent协议的新手,我试图向跟踪器请求一个文件。 为此,我使用C#程序解析并打印了一个正在运行的.torrent文件,然后我只是通过PostMan请求这些信息的跟踪器
提取的信息是:
- announce :
http://bt1.archive.org:6969/announce
- announce-list
http://bt1.archive.org:6969/announce
http://bt2.archive.org:6969/announce
- comment :
This content hosted at the Internet Archive at https://archive.org/details/6201484321_f1a88ca2cb_b
Files may have changed, which prevents torrents from downloading correctly or completely; please check for an updated torrent at https://archive.org/download/6201484321_f1a88ca2cb_b/6201484321_f1a88ca2cb_b_archive.torrent
Note: retrieval usually requires a client that supports webseeding (GetRight style).
Note: many Internet Archive torrents contain a 'pad file' directory. This directory and the files within it may be erased once retrieval completes.
Note: the file 6201484321_f1a88ca2cb_b_meta.xml contains metadata about this torrent's contents.
- created by :
ia_make_torrent
- creation date :
1462999235
- info
- collections
org.archive.6201484321_f1a88ca2cb_b
- crc32 :
6dbd08b2
- length :
970
- md5 :
96951c7834ee105660e0447e00ec4b31
- mtime :
1462999235
- path
6201484321_f1a88ca2cb_b_meta.xml
- sha1 :
cc69b6337b4e459ec9428629ca49fb65a6249ee8
- name :
6201484321_f1a88ca2cb_b
- piece length :
524288
- pieces :
üyR¨ÆôO2¿Ù'ù'┼0ö
- locale :
en
- title :
6201484321_f1a88ca2cb_b
- url-list
https://archive.org/download/
http://ia600704.us.archive.org/24/items/
http://ia800704.us.archive.org/24/items/
所以我有这个要求发送:
http://bt1.archive.org:6969/announce?info_hash=cc69b6337b4e459ec9428629ca49fb65a6249ee8&peer_id=ABCDEFGHIJKLMNOPQRST&ip=80.11.255.166&port=6881&downloaded=0&left=970
有什么问题?
修改
我用WireShark跟踪了uTorrent对此torrent的请求,hash_info为:%ac%c3%b2%e43%d7%c7GZ%bbYA%b5h%1c%b7%a1%ea%26%e2
但是,如果我sha1信息值的bencoded形式是
collectionsl35:org.archive.6201484321_f1a88ca2cb_be5:filesld5:crc328:262eacb06:lengthi346936e3:md532:48ab0840ed6501c37072b261fd52bcde5:mtime10:13176646104:pathl27:6201484321_f1a88ca2cb_b.jpge4:sha140:6ce409c363e038a57c79ed17ee97571058101575ed5:crc328:6dbd08b26:lengthi970e3:md532:96951c7834ee105660e0447e00ec4b315:mtime10:14629992354:pathl32:6201484321_f1a88ca2cb_b_meta.xmle4:sha140:cc69b6337b4e459ec9428629ca49fb65a6249ee8ed5:crc328:f94424566:lengthi5253e3:md532:9d665d42153c0b27b5eb4922c4ddef685:mtime10:13176646704:pathl33:6201484321_f1a88ca2cb_b_thumb.jpge4:sha140:e5e775116512cebdc0ad048ce3a0e3dd100becf0ee4:name23:6201484321_f1a88ca2cb_b12:piece lengthi524288e6:pieces20:üyR¨Æô;O2¿Ù‚ù‘†0ö
我没有相同的哈希
答案 0 :(得分:1)
您需要 URL编码哈希,而不是以原始十六进制发送。
基本跟踪器宣布请求
info_hash 来自metainfo文件的信息值的bencoded形式的20字节sha1哈希。请注意,这是元信息文件的子字符串。 别忘了对此进行URL编码。
<强>更新强>
BencodeNET图书馆好像在做什么,为什么你不试试呢? 这些示例清楚地显示了如何计算洪流的哈希值
// Parse torrent by specifying the file path
var parser = new BencodeParser(); // Default encoding is Encoding.UT8F, but you can specify another if you need to
var torrent = parse.Parse<Torrent>("C:\ubuntu.torrent");
// Alternatively, handle the stream yourself
using (var stream = File.OpenRead("C:\ubuntu.torrent"))
{
torrent = parse.Parse<Torrent>(stream);
}
// Calculate the info hash
string infoHash = torrent.GetInfoHash();
// "B415C913643E5FF49FE37D304BBB5E6E11AD5101"
// or as bytes instead of a string
byte[] infoHashBytes = torrent.GetInfoHashBytes();
// Get Magnet link
string magnetLink = torrent.GetMagnetLink();
// magnet:?xt=urn:btih:1CA512A4822EDC7C1B1CE354D7B8D2F84EE11C32&dn=ubuntu-14.10-desktop-amd64.iso&tr=http://torrent.ubuntu.com:6969/announce&tr=http://ipv6.torrent.ubuntu.com:6969/announce
// Convert Torrent to it's BDictionary representation
BDictionary bencode = torrent.ToBDictionary();
答案 1 :(得分:1)
有两个问题:
info_hash
。你不知何故,从.torrent文件中的元数据,得到了torrent中其中一个文件的SHA1哈希值。info_hash
为ACC3B2E433D7C7475ABB5941B5681CB7A1EA26E2
info_hash
是十六进制编码的。它必须是这样的URL编码:%ac%c3%b2%e43%d7%c7GZ%bbYA%b5h%1c%b7%a1%ea%26%e2
纠正并发送:
http://bt1.archive.org:6969/announce?info_hash=%ac%c3%b2%e43%d7%c7GZ%bbYA%b5h%1c%b7%a1%ea%26%e2&peer_id=ABCDEFGHIJKLMNOPQRST&ip=80.11.255.166&port=6881&downloaded=0&left=970
给出答案:
d8:completei0e10:downloadedi2e10:incompletei2e8:intervali1950e12:min intervali975e5:peers12:************e