想做个磁力链搜索引擎 3

article/2025/11/8 10:32:47

上一篇中,我们已经实现了对tracker的访问,从而获取到了peer对等体的ip地址以及端口号。我们这一篇要实现的是对等体之间的通讯。

在bt种子下载中,对等体就是正在下载你需要文件的另一台主机或提供下载你需要文件的主机。每一个种子一开始都是有一个做种者做种,将种子,或磁力链发布到网上,提供给其他用户下载,上传的种子如果被其他人下载了。这时做种者即使退出,种子同样可以在网络上传播,因为已下载的用户又会自动充当种子的提供者,提供后来用户下载,就和种子一样,开花,结果,又产生新的种子。
在bt协议中,每个用户,既是下载者又是种子的提供者。所以bt协议种资源不在一个网站上,而是在对等体中。我们只需要与对等体在bt协议下进行通讯,即可获得资源。

part1对等体协议包
参见这篇论文 https://www.docin.com/p-1038423389.html
基本上是这篇论文里提到的11种格式,但是我抓包还发现了两种格式

 		  4bytes 1byte Xbytes port	  1+X 	 9 		端口号 4bytes 1byte Xbytesextended 1+X    20 	 extended

可能还有其他的包格式,但是基本的结构都是

 4bytes   	1byte      	Xbytes 1+X		包种类编号  	内容

为了安全起见,代码中还是要预留一个未知包的处理情况

判断包种类的流程是
1.从输入流中读取4个字节(Head)
2.判断前4个字节是否为0,为0表示心跳包(主要为了维持tcp连接,防止tcp连接因长时间为响应断开,可以选择不做处理,后面另外开一个线程专门处理心跳包),否则再读取一个字节
3.通过这个字节判断包种类,1-9,default,对不通包设置不同的处理函数
4.读取Head-1长的字节。

part2对等体通讯协议基本流程
1.建立tcp连接
2.发送握手请求包
3.接收对方的握手请求包
4.检查握手请求包,主要检查hash检验值(磁力链特征码)是否和你需要下载的文件一致
5.如果一致,发送己方bitfield包
6.接收对方的bitfield包
7.检验bitfield包长度是否正确
8.比较己方和对方的bitfield包,如果对方含有己方没有的piece片段,发送interested包,反之,发送uninterested包
9.等待对方的unchoke包。若收到unchoke包即可进行请求交互。
10.发送request请求,请求需要资源片段
11.如果request请求合法,对方将发送给你piece包,piece包中包含了资源片段。非法的话对方会choke你的。
12.检验资源片段是否正确,正确者存入磁盘,反之,重新发送请求
13.重复10,11,12,即可获取资源

上面是站在请求资源角度情况下一对一的主要流程。实际情况下,
1.对方也会向你发送请求(每个用户既是下载者又是提供者),倒过来对方也会通过以上流程向你发送请求。
2.一般而言bt下载是一对多的,这样下载快。不太可能只从一个用户获取资源。
3.还有许多可能的错误情况需要处理,上面只是理想情况下的流程

所以实际上还是有些复杂的。主要需要用到的知识是 一些并发编程的知识。

基本思路,
主程序开两种线程,检验下载是否完成的线程,socket连接线程,socket线程里包含三条线程,心跳包线程,发送信息线程,接收信息线程。
目前初步实现了socket线程,代码放最后,以后继续完善

贴上实验结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于只和一个peer进行交互,下了半天,才下了10片段。等全部下载完成后,将所有文件按照种子文件里各文件的排序,以及各文件长度,将资源切分合并成对应格式即可(比如原来种子中显示资源中有100字节的文本,200M的视频,我们自需要将piece文件对照切分,前100各字节打包成txt文本,后200M打包成视频文件)。

ps:在编写代码中我碰到了几个问题,这里记录下来
1.tcp连接除非是对方主动shutdown,否则在inputstream中是不会读到结尾标识-1的,所以在tcp交互时,不要以-1作为一次读取的结尾标志。我一开始就以为每次发送数据都会有结尾标识符,然后一直read timeout。现在理解起来tcp交互的模型和管道通讯有点像。
2.在第二篇我们通过tracker获取的ip地址,一般情况下80%以上的我们是访问不了的。为了快捷找到可用对等体进行测试,可以利用比特彗星(比特彗星下载后360会提示木马,我没理它,现在用着也没问题,大概没问题的吧2333)查看。
3.根据实验发现,内网可访问的对等体数目比较少(不知道是网络原因还是需要tcp打洞?),我连接室内移动的wifi时一些无法访问的ip,在换成外部电信网就好多了。
4.包格式一定要对

代码
https://github.com/yyyhah/BtDownload/blob/master/Connection/ConnectionThread.java


http://chatgpt.dhexx.cn/article/AKGjm5rc.shtml

相关文章

[搜片神器]直接从DHT网络下载BT种子的方法

转自:http://www.cnblogs.com/miao31/p/3332819.html DHT抓取程序开源地址:https://github.com/h31h31/H31DHTDEMO 数据处理程序开源地址:https://github.com/h31h31/H31DHTMgr DHT系列文章: 1.[搜片神器] 之P2P中DHT网络爬虫原理 2.[搜片神器]之DHT网络爬虫的代码实现方法…

P2P下载器-P2P种子搜索器

P2P种子搜索器(p2psearcher)是一款集种子搜索器和在线云点播于一身的实用工具,基于先进的P2P搜索技术,可在瞬间搜遍全球ED2k网络资源。p2psearcher搜到的视频资源可以直接在右侧的云点播播放页面试播预览,并且提供高品质观影效果。需要的朋友…

这才是CSDN最系统的网络安全学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

网络安全学习资源分享

提高技能 网络安全学习资源汇总 项目描述OWASP安全的牧羊人(https://security-shepherd.ctf365.com/login.jsp)作为11/6破ctflearn(https://ctflearn.com/)基于CTF网站账户,用户可以在解决一系列挑战ctfs写-不间断电…

网络安全学习路线,入门到入坟,史上最全网络安全学习路线整理

很多小伙伴在网上搜索网络安全时,会出来网络安全工程师这样一个职位,它的范围很广,只要是与网络安全挂钩的技术人员都算网络安全工程师,一些小伙伴就有疑问了,网络安全现在真的很火吗? 那么寒哥就带大家看…

网络安全学习:安全学习

特别有用 赶脚,,,赶脚,,,这组比较像,,,因为响应头带了个audio,再巴拉开响应头看看: 就是你了 /20170407233726/7bcb1a38c8e959f677b58519ac8a2958/ymusic/9c2b/57dd/26dc/df6def971d6cdd160d347dcb6a1c18f4.mp3 之后就不在C盘的缓存文件夹里巴拉了&…

网络安全(黑客)学习路线

目录 背景 那么要怎么才能成为一名黑客呢? (1)基础部分 ​编辑(1.1)计算机网络 : (1.2)Linux 系统及命令 : (1.3)Web 框架 : &…

网络安全学习路线

如何成为一名黑客,很多朋友在学习安全方面都会半路转行,因为不知如何去学,今天在知乎看到个不错的,果断收藏学习下路线。此篇博课讲的非常细,有兴趣的同学可以参考。 关于黑客或网络安全如何入门和学习路径,我在去年的问答和专栏中也陆陆续续解读过,近期知乎时间线上又…

网络安全学习篇

提示:学习网络安全,了解网络知识 文章目录 (一)虚拟机环境搭建01虚拟机概述传统运行模式虚拟机运行架构1.寄生架构 (实验环境、测试环境)2.原生架构(生产环境) 虚拟机平台产品FTP服务器 02虚拟机管理2.1关闭…

网络学习---网络安全、HTTPS

网络安全 网络通信中,面临的4种安全威胁 截取:窃听通信内容中断:中断网络通信篡改:篡改通信内容伪造:伪造通信内容 网络层 - ARP欺骗 ARP欺骗可以造成的后果: 可以让攻击者获取局域网上的数据包&#x…

信息安全的一些东西,初步查询了解!

学信息安全需要哪些基础: https://zhidao.baidu.com/question/1864586538306265827.html 有哪些信息安全方面的经典书籍: https://zhidao.baidu.com/question/2207926205965713708.html 信息安全推荐书籍: https://www.cnblogs.com/zytrue/p/…

网络安全学习网站

https://www.ctftools.com CTF工具合集 http://www.shiyanbar.com/ 西普实验吧 http://hackinglab.cn/encode.php实验室 http://www.ichunqiu.com/i春秋 https://www.shiyanlou.com/实验楼 http://www.hetianlab.com/合天 综合学习平台: http://edu.go…

5个自学网络安全的网站,全是技术干货!

自学肯定少不了去技术网站“偷师学艺”,今天也整理了一些我常看的技术网站,给想自学网络安全的朋友一点参考建议。 话不多说,直接开整(仅供参考,有不当之处欢迎指出改正) 一、FreeBuf FreeBuf是网络安全行业…

数据库优化详解

一、优化方向 可以看出来,数据结构、SQL、索引是成本最低,且效果最好的优化手段。 数据库优化从以下几个方面优化: 数据库设计—三大范式、字段、表结构 数据库索引 存储过程 (模块化编程,可以提高速度) 分表分库 (水平分割&a…

数据库查询优化器

引言 我们知道,目前通用的数据库查询语言是SQL语言(Structured Query Language)。SQL语言也是一种编译型语言,需要SQL编译器编译后才能执行,但它与C、C、Java等语言不同,SQL语言是一种非过程化语言&#x…

数据库优化 - 实例优化

从网上去搜数据库优化基本都是从SQL层次进行优化的,很少有提及到数据库本身的实例优化。就算有也都是基于某个特定数据库的实例优化,本文涵盖目前市面上所有主流数据库的实例优化(Oralce、MySQL、POSTGRES、达梦),按照文章的配置能…

MySQL数据库优化总结

在说mysql优化之前,我们首先要知道的一个事情,就是系统优化顺序是怎么样的?如下图: 架构调优:在系统设计时首先需要充分考虑业务的实际情况,是否可以把不适合数据库做的事情放到数据仓库、搜索引擎或者缓存…

数据库优化常用方案

从图中可以很明显的看出Mysql数据库优化的常用方法以及成本的高低。sql语句的优化和索引的优化是成本最小但是效果最好的方法,关于这两点我总结了如下几个优化方法: 1、sql语句中不使用子查询,比如delete from user where uid not in( selec…

数据库优化:优化SQL步骤

优化SQL步骤 1 查看SQL执行频率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。show [session|global] status 可以根据需要加上参数“session”或者“global”来显示 session 级(当前连接)的计结…

数据库优化一般思路(个人经验之谈)

随着系统规模的不断增加,数据量和并发量不断增大,整个系统架构中最先受到冲击而形成瓶颈的,定然是数据库,因此数据库层面的优化,是一个程序员不可或缺的技能,以下是我在使用数据库中的一些心得,…