hash下载?怎么利用torrent hash下载东西

更新时间:2025-03-08  版本:v0308

一、torrent hash怎么用

与特征码的用法一样。在hash前加上“magnet:?xt=urn:btih:”,再复制进迅雷里面,就能得到种子。torrent文件本质上是文本文件,包含Tracker信息和文件信息两部分。

Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据BitTorrent协议内的B编码规则进行编码。

hash下载?怎么利用torrent hash下载东西

它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入.torrent文件中;所以,.torrent文件就是被下载文件的“索引”。

根据BitTorrent协议,文件发布者会根据要发布的文件生成提供一个种子文件。下载者要下载文件内容,需要先得到相应的种子文件,然后使用BT客户端软件进行下载。

二、怎么利用torrent hash下载东西

与特征码的用法一样。在hash前加上“magnet:?xt=urn:btih:”,再复制进迅雷里面,就能得到种子。torrent文件本质上是文本文件,包含Tracker信息和文件信息两部分。

Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据BitTorrent协议内的B编码规则进行编码。

它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入.torrent文件中;所以,.torrent文件就是被下载文件的“索引”。

hash下载?怎么利用torrent hash下载东西

根据BitTorrent协议,文件发布者会根据要发布的文件生成提供一个种子文件。下载者要下载文件内容,需要先得到相应的种子文件,然后使用BT客户端软件进行下载。

三、info hash 码如何下载

最近一直在看TCP数据流的重组,看了两三天,写了个程序试了一下,结果让我大失所望。一运行程序我的硬盘空间就开始变小,很明显,不一会儿的功夫,好几G的空间就没了,但是什么也没重组出来。弄得我头昏脑胀,都快失去信心了。

既然这样了,那就暂时放放吧,等有心情了重头再来。接下来无事可做,无意间看见了曾经捕获的一个TCP包中的BT下载时的信息,在一个HTTP请求的数据里面有个经过URL编码的info_hash字段,感觉以后可能会用到这个东西,但是是原始的值。正好,那就研究一下,写个解码程序吧!

经过一番研究,发现这个URL编码跟普通的URL编码还是有区别的。

例如:一个经过URL编码的info_hash如下:

m%88uC%15W%C8%2D%3Bf%DB%BCi%BB%FF%C9%B2J%DD%F4

其原始值为:6D8875431557C82D3B66DBBC69BBFFC9B24ADDF4

经过分析不难发现,凡是%号后面的两位都跟原始值一样,除此之外,其余的值均为其ASCII码的16进制表示,而且只有数字跟字母。这样一来,好像比普通的URL编码要简单的多,呵呵~~

知道了其中的规则,那就开始写代码吧。

在代码中,为了满足在线捕包、在线解码的要求,我就牺牲了一些存储空间,为字母和数字跟它们对应的16进制值都做了一个影射,这样的话就不必再把ASCII码转换为16进制了,效率虽然提高了,但需要更大的存储空间。

在linux下写了C程序,源代码如下:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

const char char0_9[10][2]={

{'3','0'},{'3','1'},{'3','2'},{'3','3'},{'3','4'},

{'3','5'},{'3','6'},{'3','7'},{'3','8'},{'3','9'}

};

const char charA_Z[26][2]={

{'4','1'},{'4','2'},{'4','3'},{'4','4'},{'4','5'},

{'4','6'},{'4','7'},{'4','8'},{'4','9'},{'4','A'},

{'4','B'},{'4','C'},{'4','D'},{'4','E'},{'4','F'},

{'5','0'},{'5','1'},{'5','2'},{'5','3'},{'5','4'},

{'5','5'},{'5','6'},{'5','7'},{'5','8'},{'5','9'},{'5','A'}

};

const char chara_z[26][2]={

{'6','1'},{'6','2'},{'6','3'},{'6','4'},{'6','5'},

{'6','6'},{'6','7'},{'6','8'},{'6','9'},{'6','A'},

{'6','B'},{'6','C'},{'6','D'},{'6','E'},{'6','F'},

{'7','0'},{'7','1'},{'7','2'},{'7','3'},{'7','4'},

{'7','5'},{'7','6'},{'7','7'},{'7','8'},{'7','9'},{'7','A'}

};

void

de_url(char*url)

{

char*UnURL;

char ch;

int i= 0, j= 0;

int index;

int len= strlen(url);

UnURL=(char*)malloc(40*sizeof(char));

if(!UnURL){

printf("UnURL malloc wrong!");

exit(1);

}

memset(UnURL, 0, 40*sizeof(char));

while(i< len){

ch=*(url+i);

if(ch=='%'){

i++;

for(; j< 2; j++){

strncat(UnURL,&(url[i]), 1);

i++;

}

j= 0;

}else if(ch>='a'&& ch<='z'){

index= ch-'a';

strncat(UnURL, chara_z[index], 2);

i++;

}else if(ch>='A'&& ch<='Z'){

index= ch-'A';

strncat(UnURL, charA_Z[index],2);

i++;

}else if(ch>='0'&& ch<='9'){

index= ch-'0';

strncat(UnURL, char0_9[index], 2);

i++;

}else

printf("something else!\n");

}

printf("\n%s\n", UnURL);

}

int

main(int argc, char*argv[])

{

char*URL="%A8%2F%FCYE%7E%F2Trx%0B%D8ZYF%DC%B9%D3v%F5";

de_url(URL);

return 0;

}

在线分析时,只需要把main函数给替换掉,就可以了。

虽然TCP流的重组还没弄出来,但会再接再厉,继续加油!