代码连接:https://github.com/zhangbohun/BitTorrentNetworkSpider
代码简要介绍,主要分为几个部分
0 lib库,包括bencode(用于处理B编码),decodeh(用于处理可能的编码问题),pymmh3(用于实现简化版的布隆过滤器),SQLiteUtil(用于实现sqlite3单线程操作)
1 sinffer用于获取网络内的Node节点信息,主要依靠KRPC协议中定义的find_node方法
2 receiver用于接收其他节点发来的信息,包括find_node回复(可以获取新的node信息),以及ping(需要回应pong),find_node,get_peers,announce_peer(可以获取到有用的种子信息)请求
3 inquirer用于获取元数据,通过MetadataInquirer根据bep_0009获取元数据扩展协议实现
4 recorder用于记录种子元数据到数据库,这里用的是标准库自带的sqlite3
5 BloomFilter通过pymmh3以及位操作实现的简化版的布隆过滤器用于数据过滤减少重复操作
6 以上整体构成 Spider主要部分,另包括多线程,获取随机 id,以及 join_dht 加入 DHT 网络等实现