种子转磁力的方法
来源:互联网 发布:建筑cad软件 编辑:程序博客网 时间:2024/04/27 22:37
上一篇文章是从网上转载的关于bencode的基本知识,有了这些基础,我们就可以通过种子文件进行分析了。具体的种子结构网上有很多相关的资料,这里不多介绍了。
种子文件转磁力的关键是info字段,具体方法就是把info字段取出然后进行sha1算法解码
具体代码:
BOOL aa::parse_torrent( std::string FilePath )
{
long long metafile_size,beg,end,pos;
int push_pop = 0;//用于标记,找到d对应的e
char *metafile_buf = NULL;//保存读文种子文件的缓冲区
long i;
FILE *fp = NULL;
if( FilePath.c_str() == NULL )
{
return -1;
}
fp = fopen(FilePath.c_str(),"rb");//以二进制形式打开
if(fp == NULL){
printf("open file fail %s:%d\n",__FILE__,__LINE__);
return -1;
}
//获取种子文件长度
fseek(fp,0,SEEK_END);//将文件指针移动到文件尾
metafile_size = ftell(fp);
if(metafile_size == -1){
printf("get metafile size fail %s:%d\n",__FILE__,__LINE__);
return -1;
}
#ifdef DEBUG
printf("metafile size = %lld\n",metafile_size);
#endif
fseek(fp,0,SEEK_SET);//将文件指针移动到文件头
metafile_buf = (char*)malloc(metafile_size+1);
if(metafile_buf == NULL){
printf("malloc fail %s:%d \n",__FILE__,__LINE__);
return -1;
}
memset(metafile_buf,0,metafile_size);
for(i = 0;i < metafile_size;i++)
{
metafile_buf[i] = fgetc(fp);
}
metafile_buf[i] = '\0';
pos = -1;
for(i = 0;i < metafile_size;i++)
{
if(memcmp(metafile_buf+i,"4:info",6) == 0){
pos = i;
break;
}
}
if ( pos == -1 )
{
MessageBoxA(0,"解析种子文件错误","提示",0);
return FALSE;
}
pos = pos + 6;
beg = pos;
do{
if(metafile_buf[pos] == 'd'){ //字典开头
push_pop++;
pos++;
}
else if(isdigit(metafile_buf[pos]))
{
int i = 0;
//如果是数字,说明后面跟一个字符串 5:files 跳过:和字符串
while(isdigit(metafile_buf[pos])){
i = i * 10 + (metafile_buf[pos++] - '0');
}
pos++; //pass:
pos += i;
//printf("***%c\n",metafile_buf[pos]);
}
else if(metafile_buf[pos] == 'l') //列表开头
{
push_pop++;
pos++;
}
else if(metafile_buf[pos] == 'i' && isdigit(metafile_buf[pos+1])) //说明是数字
{
push_pop++;
pos++; //pass:i
while(isdigit(metafile_buf[pos])){
//跳过i和e之间的数字
pos++;
}
// printf("***%c\n",metafile_buf[pos]);
// printf("push_pop = %d\n",push_pop);
}
else if(metafile_buf[pos == 'e']){//如果是e push_pop-1
push_pop--;
pos++;
}
}while(push_pop > 0);
end = pos;
Sha1Value info_hash_ = Sha1Value(&metafile_buf[beg],end-beg);
m_szHash = info_hash_.GetReadableString();
//CharUpperA( (LPSTR)m_szHash.c_str() );
return TRUE;
}
注:Sha1Value这个类来源于网络,个人通过开源种子下载工具找到的。
个人微信,多多交流:
- 种子转磁力的方法
- 最新磁力种子库
- 一款可以在线播bt种子、磁力的播放器
- BT种子2磁力链接
- 根据hash值找到bt种子的磁力下载链…
- 【归纳备忘】收集了一些神奇的BT种子磁力链接搜索网址
- 各大磁力种子搜索引擎对比
- 各大磁力种子搜索引擎对比
- 硬汉形象~铁拳电影~磁力种子下载
- Python 实现自动获取种子磁力链接
- 使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)[搜片神器]
- 详解什么是BT种子、迅雷下载链接、磁力链接
- linux命令行下载BT种子和磁力链接
- npm库v9介绍:对种子或磁力链截屏
- 种子文件转成为磁力链接 下载BT磁力转换小工具
- 快乐的种子(转)
- 【P2P网络】磁力链接转换为种子文件 magnet to torrent
- 【P2P网络】磁力链接转换为种子文件 magnet to torrent .
- Python-Eclipse搭建开发环境PyDev
- String.split()用法
- CentOS下ZooKeeper单机模式、集群模式安装
- angularjs中directive的restrict 使用说明
- inline与宏定义区别
- 种子转磁力的方法
- JAVA中int、String的类型转换
- lightoj1049 - One Way Roads
- 工程师容易犯的三个错误 (3)
- Android 离线语音使用方法(讯飞语音)
- org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.XXX.util.spri
- org.apache.commons.lang.StringUtils(StringUtils工具类的常用方法)
- nginx配置之事件配置
- Python单例模式的4种实现方法