Go实现一个DHT爬虫
最近无意看到有人做种子的爬虫,还能做成搜索引擎,所以有兴趣试了一下。
我的项目地址:https://github.com/owenliang/dht
DHT是BT的去中心化协议,可以避免依赖BT协议中心tracker节点,实现在互联网中自由的漫游,找到拥有资源的节点。
实现DHT可以参考:http://www.bittorrent.org/beps/bep_0005.html,实现过程完全参考该标准。
最终效果就是可以收到很多很多磁力链,将磁力链放入下载软件会自动找到有效的下载节点(因为下载软件也是遵循DHT的),如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
magnet:?xt=urn:btih:eaaa1a09273ddf004babc7660c1f7bac2c2f9351 magnet:?xt=urn:btih:eaaa1a09273ddf004babc7660c1f7bac2c2f9351 magnet:?xt=urn:btih:fc7c0f0ef20ed6c7a3be97744350ff2bd97e0d50 magnet:?xt=urn:btih:fc7c0f0ef20ed6c7a3be97744350ff2bd97e0d50 magnet:?xt=urn:btih:eaaa1a09273ddf004babc7660c1f7bac2c2f9351 magnet:?xt=urn:btih:c32d4c09cdd2b8f4cf05d6c921e0c1ac6af4e0a1 magnet:?xt=urn:btih:c24dbe09b7f0e469997634880039089ff8216c34 magnet:?xt=urn:btih:9537068497734c46ae1559bbbb90f005030fe866 magnet:?xt=urn:btih:913f36891af8cff0b4258122bdd2d8dfbd18f5a5 magnet:?xt=urn:btih:d317410e7df50d6e1400e5d6160aac1518201814 magnet:?xt=urn:btih:81f0b30e2302a694d68bdf988a94d354597b637d magnet:?xt=urn:btih:c3a1e0b84e128a90763351cd50d0e12488cb2200 magnet:?xt=urn:btih:92e9a1b907075c9486ba1482cb4290dc297c75a7 magnet:?xt=urn:btih:9b6f23f4e2641e9cf569e31dd05a527c30bf4070 magnet:?xt=urn:btih:f46c7120410e4e1628ef661490394c9707573423 magnet:?xt=urn:btih:98ed2db154e1128d1eb9f55d51e6f2e95f017bd4 magnet:?xt=urn:btih:87fba4c51017e3774a51d19a9bb9c840d2013108 magnet:?xt=urn:btih:d92274564a000e2dddb31f61f2322eb107a6f1cc magnet:?xt=urn:btih:96801e12479de2d00814627e6e08dcc8d131723b magnet:?xt=urn:btih:9d0706c9bb249bde79953e09a2b0438d91b9d129 magnet:?xt=urn:btih:906c273c9f0841b75a23477206be3c8dfd2b059f magnet:?xt=urn:btih:a15d524b1e80867ec7125370ae1d6b270241a84d magnet:?xt=urn:btih:8fbe7688515bed53941b5baf98f2da7c057ee5eb magnet:?xt=urn:btih:e90b4733d38d2a91d8cfaa2aea253ffea8419bea magnet:?xt=urn:btih:a33a7ba6f73879113d1c82eb31d0a0b2e255c535 magnet:?xt=urn:btih:ad6cc2b099ca5e34ca45a8cd6e425220fc291b03 magnet:?xt=urn:btih:e90b4733d38d2a91d8cfaa2aea253ffea8419bea magnet:?xt=urn:btih:ad6cc2b099ca5e34ca45a8cd6e425220fc291b03 magnet:?xt=urn:btih:eaafe1a0ad3cdd829ca89c0f9a6005dde4d61393 magnet:?xt=urn:btih:7c25009dab5ce5d33997d125d311d306325919ea magnet:?xt=urn:btih:de9edc192d25e7f2d7971a398216920571a28bba |
如果希望进一步获取这些磁力链背后有哪些文件,那么实际上需要使用torrent的扩展协议进一步通讯。
其原理是,通过DHT已经获得了infohash以及peer address,接下来需要做的是通过TCP连接到peer并基于peer wire协议进行通讯,将种子文件中的metadata下载回来,里面会包含文件列表。
网上这方面的资料不多,我特意花时间研究了一下,其实也不复杂。我是阅读了几篇博客,然后找了一个python实现的demo进行对比学习,最终梳理出了整个流程。
我fork了python代码,在其中做了相关注释,大家可以阅读一下:https://github.com/owenliang/mala项目的中文注释,其中包含了博客链接,大家认真阅读后相信很快就可以理解。后续我找时间会把这段扩展协议实现到我的dht项目中,从而知道每个磁力链背后的文件内容,进一步就可以实现一个磁力链搜索引擎了。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~
