Posted on 2011-01-19 11:28
旁观者 阅读(341)
评论(0) 编辑 收藏
郑昀 2010.10
话题关键词:
- DHT网络爬虫
- KAD DHT
- P2P网络主动测量
- memeTracker
简单原理:
如果你利用 P2P 现有各种工具,如BT、电骡、迅雷、脱兔等这些支持DHT(动态哈希表)分布式存储方式的工具,这种网络不需要中心节点服务器,而是每个客户端负责一个小范围的路由,并负责存储一小部分数据, 从而实现整个 DHT 网络的寻址和存储。
那么据国外这几年的研究(国内是中科院计算所在做),可以登入 KAD 网络后,从附近节点开始查询,查它自己维护的邻居节点( KAD 网络会给每个客户端分配一个唯一的 ID 值,然后对不同的 ID 值进行异或来得到两个客户之间的“距离”。每一个节点都会维护一个桶( bucket ),“距离”越近的用户桶里的数量会越多,节点定期对桶里的用户进行清理,以保持其有效性),这样一圈一圈向外快速遍历,直至获取几万乃至几十万节点以及它维护的资源列表(也就是下载种子和查询词)。
这样,就可以在某一个普通的网络接入处,探测到大范围内短时间内下载最多的文件名和hash值,据此生成热榜,进一步根据 hash 值判断哪些文件是重点追踪对象,以及是谁上传到网络中的。
搜索关键词:
这种相关技术在国外一个用途是,版权所有者要追踪盗版者在无服务器状态下的BT网络中分发行为以提起诉讼。所以如果有效率高超的 DHT Crawler ,版权所有者就不用在什么电信机房总出口处捕获 P2P 流量了,而是在各个地方都可以收集信息。对于国内来说,用这个原理玩信息聚合和热点追踪(memeTracker)还是可以的。
这方面有大量英文论文,按前面列的搜索关键词搜索即可,中文的可以读读《eMule系统中的非均匀性分布》,它基本已经把原理说清楚了:
『使用 KAD 协议中的查询原语对 eMule 系统进行抓取。修改一个 eMule 客户端。首先让它连上 KAD 网络.然后对该客户端所知道的邻居节点发送
查询请求.收到请求的邻居节点会响应它所知道的另外一些节点的信息.将这些新节点加人本地列表,然后对这些新得到的节点进行查询,如此反复,
对整个网络进行了一次广度优先搜索 该方法与 Steinert3J 的方法是一致的。在此之后,向节点发出“共享文件信息”查询请求,并将结果记录于数据库。』
资源参考:
SharkyPy
Entangled - DHT and Tuple Spa
是两个Python开源的DHT实现。
p.s.:
你如果做过这块研发,不妨与我聊聊。:D