分享好友 最新动态首页 最新动态分类 切换频道
BT种子与Tracker解析
2024-12-26 20:48

上一篇我们已经解析出种子的基本结构。下一个问题就是,如何通过种子文件所给的信息,获取文件的下载地址。

part1.地址格式
首先,我们可以发现,announce和announce-list里面的地址有两种格式的,udp开头的地址,以及http开头的地址。http开头的地址很好理解就是遵循http协议的地址。那udp开头的地址就是遵循udp协议的地址喽。这样理解有对也有不对。准确点讲这个udp地址实际上是遵循udp tracker 协议.(注意:上面两种地址都是无法浏览器直接访问的。)

part2.请求构造解析
1.对于http开头的地址,bt协议对其的介绍在这
http://www.bittorrent.org/beps/bep_0023.html
简单来讲,就是需要利用get的方法,传递给目标tracker网址一些必须的参数,网址接收了这些参数以后会返回数据。
这里有一篇博客详细介绍了这两个地址构造
https://blog.csdn.net/wenxinfly/article/details/1504785
重复的我也没啥好讲了。我就补充一下这篇博客没讲清楚的。
我们可以知道访问http开头的地址的请求构造类似
GET /announce?peer_id=aaaaaaaaaaaaaaaaaaaa&info_hash=
aaaaaaaaaaaaaaaaaaaa&port=6881&left=0&downloaded=100&uploaded=0&compact=1

这里有三点要提醒
1)请求为get请求
2)peer_id是自己随机设定的,只要有20个字节即可
3)这个info_hash,实际上应该是真正的磁力链特征码再经过urlencode得到的。
我们网络上拷贝黏贴下来的磁力链特征码一般是这样的 052ef38011e34ef27e58391da13a327eb88323a3
而这个并不是磁力链特征码的真正样式。只是为了直观显示经过处理后的字符串(因为实际的特征码显示出来会是一串乱码,将上面的字符串,两个字符并成一个就是实际的磁力链了。如,假设我们拷贝的磁力链为”012e“(上面那个太长了,选一个短点的分析,这串编码的二进制流为00000000 00000001 00000010 00001110.那么实际的磁力链二进制编码为00000001 00101110。实际上就是压缩了一下。

更深一步理解为什么要”压缩“一下就要理解以下两点。
1.计算机屏幕上显示的数据和实际数据是不完全等价的。
因为计算机中所有的数据都是二进制流形式,但是我们人却难以理解二进制流的文件。所以就有了编码,将二进制流转化为人能读取的字符流。但是这有一个问题,那就是,实际上二进制01所能表示的”字“数目要多于字符的数目。所以不管哪种编码,那必然会出现有些二进制流乱码,甚至无法编码的问题。所以显示和实际是不完全等价的。
2.加密算法一般都是对于二进制操作。
一般加密算法都是对于01二进制流进行加密的,输入的是01二进制流,输出的也是01二进制流。如上面提到的,二进制流和字符流是不完全等价的。那么就必然有许多字节无法编码成字符。所以加密算法得到的密文一般都是乱码。

磁力链特征码是用sha1加密的->它是一串二进制流->它不能完全编码成任何一种编码(会有乱码)->为了直观显示->将其一个字节拆成两个(这样必然有对应的编码显示)直观显示。

所以对于http开头的tracker请求,我们需要对参数info_hash特殊处理,将其二进制压缩,再编码(这个编码如果不同的话,最后经过urlencode编码得到的数据会不同,我利用utf-8编码是可以实现访问的)得到真正的磁力链字符串,再urlencode。
在php中只要$s= pack(“H*”,info_hash);再$y = urlencode($s);
而java中没有对应的函数,只能自己写了。。。代码放最后。

2.对于udp开头的地址,bt协议对其的介绍在这

http://www.bittorrent.org/beps/bep_0015.html
我一开始以为是udp地址(想起来也是有点蠢。。。

实际地址是udp://后面那部分,例如地址”udp://open.demonii.com:1337“,实际地址为open.demonii.com,端口为1337.
udp开头的地址请求比较麻烦。有一些情况我还不是特别理解,先写下来吧。

首先,这个请求是建立在udp协议之上的,需要用到udp编程
其次数据交互要如下几步走
1.建立连接

我们先要向tracker发送数据包connection_input,包中包括如下几个部分connection_input,action(0,transcation_id(自己定,随机)。connection_id初始值(即建立连接时的值)为0x41727101980(由于数据包是二进制传输的,所以所有的数据都要转为二进制,这个16进制需要转为2进制)。

2.确认建立

得到返回数据包,判断包的字节数是否为16字节,检查连接状态action是否为0,检查transcation_id是否和你设置的一致,保存返回包中的connection_id。

3.发起请求
这次请求数据包比较长,大概100个字节左右,包括connection_id(我们确认建立连接时保存的,action_id(1,表示start),transacation_id(自己定,随机),peer_id(随机),ip(0表示你希望tracker使用udp上的地址),key(随机,自定义)…

4.接收用户下载信息
和2差不多,检查action==1,检查transcation_id.返回数据包中会包含当前正在下载的用户ip以及port。这样就获得了下载ip。

贴上http访问解析后的结果

udp通讯代码
https://github.com/yyyhah/BtDownload/blob/master/Connection/UDPTrackerTransfor.java
http通讯代码
https://github.com/yyyhah/BtDownload/blob/master/Connection/HTTPTrackerTransfor.java
调用演示代码
进行udp开头的地址通讯

 

进行http开头的地址通讯

 

java中16进制字符串转2进制流的函数(我写完这段代码,编译器就报优化bug了,不知道是不是在这段的出错了,如果你也遇到这个问题,百度一下就好了


最新文章
用AI生成美女写真!简单易用的教程与工具推荐
DALL-E:这一AI工具由OpenAI开发,以其令人惊艳的图像生成能力而闻名。用户只需提供描述,系统便能生成多种样式的美女图片,效果多样且极具艺术感。然而,生成高质量的图像需要经过多次尝试,用户可能需耐心调整描述才能达到理想效果。Midj
【Excel视频教学】rank函数制作成绩排名
【推荐阅读】大家好,本视频主要讲解利用rank函数制作成绩排名首先我们来看一下案例,在本案例中有253条数据需要对这253条数据进行排名,在排名制作过程中需要注意的是成绩并列的情况,比如说两个80分为并列第二名,那下一位就是第四名。好
淘宝店铺怎么做老顾客营销?
1、结合买家心理和收货期待,玩好宣传单在日常生活中,当我们收到宣传单可能不太会多关注,反而网上购物收到的货会比较关注,因为会对自己买的东西抱有强烈的期待,正是由于这份收货心理,关于买的产品,一些相关的传单会有很大几率去看。
Python 人狗大 CSDN:一个 Python 开发者的学习交流社区
Python 人狗大 CSDN 社区汇聚了来自世界各地的 Python 爱好者和专业开发者。无论是初出茅庐的新手,还是经验丰富的高手,都能在这里找到自己的位置。对于新手来说,这里是他们开启 Python 编程之旅的起点。丰富的入门教程、详细的基础知识
百度蜘蛛池效果:揭秘蜘蛛池推广词,如何高效利用蜘蛛池提升关键词排名
百度蜘蛛池推广词助力关键词排名提升,通过高效利用蜘蛛池,可迅速提升网站权重,优化搜索引擎排名。本文揭秘蜘蛛池推广词的使用方法,教你如何发挥蜘蛛池最大效用,实现高效关键词推广。本文目录导读:什么是蜘蛛池推广词蜘蛛池推广词的特
推广宝
推广宝竞价排名传统seo推广费用每年固定费用,无额外点击费,成本可控,高性价比。按点击量收费,竞争激烈的词,单次点击费用可达数元甚至数百元,一个词单月就要消费数千元甚至上十万元。按词付费,价格根据词的热度来决定,难度高的词优
谷歌Jules:新一代AI代码助手重塑开发者工作流程
在技术迅速发展的今天,人工智能的应用已经深入各行各业,尤其是在软件开发领域。谷歌于2024年12月12日推出的AI代码助手——Jules,标志着AI在开发者工具中应用的新里程碑。Jules不仅能够帮助开发者快速修复代码错误,还能优化每个程序员的
揭秘马尾区百度推广优化之道,企业品牌影响力提升攻略
马尾区企业通过深入优化百度推广策略,有效提升品牌影响力。策略涵盖关键词精准定位、内容创意优化、数据分析与调整,实现精准触达目标受众,增强品牌曝光度和用户互动,助力企业在线上市场脱颖而出。随着互联网的快速发展,已经成为企业提
宁波市商务局最新发展规划,打造开放型经济新高地
宁波市商务局最新发展规划致力于打造开放型经济新高地,通过深化商贸流通领域改革,加强内外贸一体化建设,推动跨境电商等新业态发展,优化营商环境等措施,促进经济高质量发展。规划旨在提升宁波市的国际影响力和竞争力,推动形成全面开放
让ai智能写个拍摄脚本的软件:推荐列表与盘点指南
随着数字媒体时代的到来,影视创作逐渐迈向高效与智能化。人工智能()在影视制作领域的应用日益广泛其是自动生成拍摄脚本的软件,成为了多创作者的得力助手。本文将为您盘点一系列免费且好用的脚本编写工具,帮助您轻松打造具有创意的拍摄
相关文章
推荐文章
发表评论
0评