python开发的 dht网络爬虫

摘要: 使用 libtorrent 的python绑定库实现一个dht网络爬虫,抓取dht网络中的磁力链接。

使用 libtorrent 的python绑定库实现一个dht网络爬虫,抓取dht网络中的磁力链接。

 

dht 网络简介

p2p网络

在P2P网络中,通过种子文件下载资源时,要知道资源在P2P网络中哪些计算机中,这些传输资源的计算机称作peer。在传统的P2P网络中,使用tracker服务器跟踪资源的peer。要下载资源,首先需要取得这些peer。

 

dht网络

tracker服务器面临一些版权和法律问题。于是出现了DHT,它把tracker上的资源peer信息分散到了整个网络中。dht网络是由分布 式节点构成,节点(node)是实现了DHT协议的p2p客户端。P2P客户端程序既是peer也是node。DHT网络有多种算法,常用的有 Kademlia。

 

dht网络下载

P2P客户端使用种子文件下载资源时,如果没有tracker服务器,它就向DHT网络查询资源的peer列表, 然后从peer下载资源。

 

Magnet是磁力链接

资源的标识在DHT网络中称为infohash,是一个通过sha1算法得到的20字节长的字符串。infohash是使用种子文件的文件描述信息 计算得到。磁力链接是把infohash编码成16进制字符串得到。P2P客户端使用磁力链接,下载资源的种子文件,然后根据种子文件下载资源。

 

Kademlia 算法

Kademlia是DHT网络的一种实现, 具体的算法参见:DHT协议

 

KRPC 协议

KRPC 是节点之间的交互协议,使用UDP来传送。

包括4种请求:ping,find_node,get_peer,announce_peer。其中get_peer和announce_peer是节点间查询资源的主要消息。

 

全文:https://my.oschina.net/hopez/blog/305538

posted @ 2016-10-08 15:31  stma  阅读(1299)  评论(0编辑  收藏  举报