最近发现一个非常棒的磁力搜索引擎网站,btcat,比特猫 ,http://btcat.org
平常我们高端用户都会用到BT工具来分享一些好玩的资源,例如ubuntu 13.04的ISO安装盘,一些好听的音乐等。这个时候我们会进入一个叫做P2P的网络,大家都在这个网络里互相传递数据,这种分布式的数据传输解决了HTTP、FTP等单一服务器的带宽压力。以往的BT工具(包括现在也有)在加入这个P2P网络的时候都需要借助一个叫Tracker的中心服务器,这个服务器是用来登记有哪些用户在请求哪些资源,然后让请求同一个资源的用户都集中在一起互相分享数据,形成的一个集群叫做Swarm。
这种工作方式有一个弊端就是一旦Tracker服务器出现故障或者线路遭到屏蔽,BT工具就无法正常工作了。所以聪明的人类后来发明了一种叫做DHT(Distributed Hash Table)的去中心化网络。每个加入这个DHT网络的人都要负责存储这个网络里的资源信息和其他成员的联系信息,相当于所有人一起构成了一个庞大的分布式存储数据库。在DHT里定位一个用户和定位一个资源的方法是一样的,他们都使用SHA-1产生的哈希值来作标识。
具体如何工作的呢?举个形象点的例子,把DHT网络比作一个朋友圈子,你想进入这个圈子必须要有一个人带领你进去,通常会有一些特定人负责介绍你进入这个圈子。当你被A带进这个朋友圈,此刻你就只认识A而已。但是你的目的是想找奥巴马总统,所以你会问A要奥巴马的联系方式,但是A没有奥巴马的联系方式,他会介绍一个美国朋友B给你认识。于是你去问B要奥巴马的联系方式,B其实也没有奥巴马的联系方式,但是B认识一个州长C。于是你又得到了C的联系方式,C把奥巴马的联系方式告诉你之后,你就可以写信或者致电给奥巴马了。
这种DHT网络听起来很不错,没有中心服务器,也不怕被DDOS,看看海盗湾如今还能挺立那么久就知道了。但是有没有安全隐患在里面呢?答案是肯定有的。有些不听话的用户可能会在DHT网络里捣乱,譬如说撒谎,明明自己不是奥巴马,却偏说自己是奥巴马,这样会误导其他人无法正常获取想要的资源。另外,用户在DHT网络里的隐私可能会被窃听,因为在DHT网络里跟其他用户交换资源的时候,难免会暴露自己的IP地址,所以别人就会知道你有什么资源,你在请求什么资源了。这也是目前DHT网络里一直存在的一个弱点。
正是利用这个弱点,我根据DHT协议用Python写了一段白菜程序,加入了这个DHT网络。在这个网络里,我会认识很多人,越多越好,并且观察这些人的举动,比如说A想要ubuntu的安装盘,那么我会把A的这个行为记下来,同时我会把ubuntu安装盘这个资源的信息也记下来,保存到数据库中,统计请求ubuntu这个资源的人有多少。如今,这个爬虫已经运行了两个昼夜,以每分钟记录3000多个资源信息的速度工作(单机器单线程,耗尽了CPU的一个核心)。到目前为止(48小时),共发出4亿条交友请求,收到1100万条来自朋友的资源请求。到底有多少资源目前另外一个程序还在分析中,从已分析的300万请求中,独立资源个数为20万个。保守估计这1100万条请求中涉及资源个数为50万以上。迟点有空的话,对这些资源进行分类和分析。
在DHT网络里发现的资源基本上都是最新的活跃资源,一些几年前的资源现在没有用户请求的话就不会被挖掘出来。想想海盗湾沉淀了那么久才500万资源,我跑了两天的程序就已经探测到50万资源,所以随着时间推移,会有更多的资源被探测出来,而且那些最新的能够被接近实时的速度发现到。本来通过增加一个节点进程可以加快探测速度,但是我没有这样做的原因是分析请求的哈希值的速度赶不上发现新请求的速度。有兴趣的朋友可以自己琢磨一下这方面的东西,国内研究DHT网络的人应该比较少。前段时间我打探过几家现在做P2P视频播放的公司里,没有人做这方面的研究。