Go实现一个DHT爬虫

最近无意看到有人做种子的爬虫,还能做成搜索引擎,所以有兴趣试了一下。

我的项目地址:https://github.com/owenliang/dht

DHT是BT的去中心化协议,可以避免依赖BT协议中心tracker节点,实现在互联网中自由的漫游,找到拥有资源的节点。

实现DHT可以参考:http://www.bittorrent.org/beps/bep_0005.html,实现过程完全参考该标准。

最终效果就是可以收到很多很多磁力链,将磁力链放入下载软件会自动找到有效的下载节点(因为下载软件也是遵循DHT的),如下:

如果希望进一步获取这些磁力链背后有哪些文件,那么实际上需要使用torrent的扩展协议进一步通讯。

其原理是,通过DHT已经获得了infohash以及peer address,接下来需要做的是通过TCP连接到peer并基于peer wire协议进行通讯,将种子文件中的metadata下载回来,里面会包含文件列表。

网上这方面的资料不多,我特意花时间研究了一下,其实也不复杂。我是阅读了几篇博客,然后找了一个python实现的demo进行对比学习,最终梳理出了整个流程。

我fork了python代码,在其中做了相关注释,大家可以阅读一下:https://github.com/owenliang/mala项目的中文注释,其中包含了博客链接,大家认真阅读后相信很快就可以理解。后续我找时间会把这段扩展协议实现到我的dht项目中,从而知道每个磁力链背后的文件内容,进一步就可以实现一个磁力链搜索引擎了。

 

发表评论

电子邮件地址不会被公开。