发信人: RunningOn (挥着翅膀的男孩), 信区: Python
标 题: 迅雷协议分析笔记_20071118
发信站: 水木社区 (Sun Nov 18 22:28:58 2007), 转信

前几天想出个主意想做个Linux下的迅雷。今天抽了点时间搞了一下下,分析出了迅雷的索引服务器地址与使用的端口,算是完成了第一步吧。发在这里,也算是笔记。如果有人也感兴趣,不妨看看。

参考文献:
http://student.bnu.edu.cn/bbs/archiver/tid-3086.html
写得很不错,原文在btbbs.org,不过我打不开这个BBS。但文章是06年12月的,文中的IP地址与端口现在迅雷都已经换了,所以只能作为参考。同理,本文也可能随时过时,所以读者请注意发文时间为2007年11月18日,转载请注明来源水木社区,作者RunningOn。

迅雷的原理,就是在下载文件时,向服务器询问会有哪些地方还有相同的文件,如果有,有同时在这些地方一起下载,以达到加速的目的。上面提到的服务器,不妨称为索引服务器。迅雷使用的是被称为p2sp的技术。

索引服务器有三个:58.254.39.4, 58.254.39.6 和 58.254.39.8。当这三个服务器都无法连接时,就不能搜索到其它有相同文件的站点,因此无法加速下载。
迅雷索引服务器直接使用80端口(根据参考文献,迅雷以前曾用其它端口,80端口以前仅作为备用端口),因为80端口是浏览网页的端口,封它的代价太大,所以要禁迅雷一般不能用封端口的办法,只能封IP。
当三个索引服务器的IP都被封时,用迅雷下载会依次发生以下现象:
1.迅雷尝试连接58.254.39.4,会尝试三次,三次的timeout分别(精确)是3, 6, 12秒。
2.尝试连接58.254.39.6,也是三次,方法同1
3.尝试连接58.254.39.8,同1
4.如果以上都失败,则休息120秒,然后返回1。
在连接索引服务器的同时,如果原始连接(就是在网页上要用迅雷下载的链接)可以下载,就会并行地下载。


迅雷使用的端口和IP地址众多,有论坛和各种网页(广告)的地址,垃圾信息众多,没有好的网络工具进行过滤。我在分析时利用了python帮助分析。方法是:
准备九个要下载的文件的地址
对每个要下载的文件,做以下工作:
1.打开ethereal,将缓冲设为100M,开始抓包
2.用迅雷下载文件
3.不必等2进行完毕,停止抓包,将数据导出为文本文件。
4.停止下载
这样得到九个文本文件。用python抓出每个文本文件中出现过的IP,重复的不计,分别存到九个新的文本文件ip1.txt~ip9.txt中
再用python分析这九个新的文本文件,统计每个IP出现的次数,将出现了多次的IP打印出来,去掉那些肯定不是迅雷服务器的IP(比如自己的IP以及DNS的IP等),得到大约十个"可疑"的IP地址。
打开防火墙(我用的天网),封掉这些IP地址,发现迅雷不能使用,说明所有的服务器地址都在那十个中。然后再手动排除,最后得到迅雷索引服务器的地址。
IP的分析只需要简单的正则表达式,数据结构用字典,很容易,代码就不贴了,相信也没人想看代码。