当前位置:去问问>百科知识>info hash 码如何下载

info hash 码如何下载

2024-11-25 17:21:16 编辑:zane 浏览量:532

info hash 码如何下载

的有关信息介绍如下:

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 #include #include 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流的重组还没弄出来,但会再接再厉,继续加油!

版权声明:文章由 去问问 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.qwenw.com/article/430824.html
热门文章