回应你们的要求,特意整理了一开始本身整合的代码,这样最简单,最直接的能够分析流程,至于文章里面提供的程序界面更多,须要你们本身开发。html
服务器在抓取和处理同时进行,因此访问速度慢是有些的,特别是搜索速度经过SQL的like来查询慢,正在经过分词改进中。。git
DHT抓取程序开源地址:https://github.com/h31h31/H31DHTDEMOgithub
数据处理程序开源地址:https://github.com/h31h31/H31DHTMgr服务器
经过调试程序你们能够初步分析DHT网络是如何加入的,等你们本身分析会了单一线程的方法,后面如何组织多线程应该没有问题。网络
接着 [搜片神器]之DHT网络爬虫的代码实现方法 这篇文章接着说明如何进入DHT网络的原理。多线程
1.DHT必须把本身电脑当服务器,别人才可以知道本身是谁,因此须要经过UDP绑定端口。函数
2.DHT须要生成一个本身的20位ID号,固然能够经过随机一个数值,而后经过SHA1来生成20位的ID号;post
3.初始化他人服务器的IP信息,这样咱们就能够从他们那里查询咱们要的信息;测试
4.对服务器进行PING操做,服务器就会回应PONG操做,这样就代表服务器活动正常.你们能够看VS调试窗口的输出信息就能够分析出一些流程方面的工做。网站
对应的协议说明:http://www.bittorrent.org/beps/bep_0005.html
5.收到信息后,经过回调函数进行相关的保存操做就能够了。
6.DHT网络通常PING操做都会有PONG回应,但发送FINDNODE回应的不会是所有有的。
7.因为本身只是假装正常的BT步骤,并无真正的提供种子下载操做,因此咱们只会发get_peers操做,不会发送annouce_peer操做,等待别人给咱们回应annouce_peer操做。
8.请求发送速度不能过快,这样的话本身的带宽也须要很多,须要考虑每一个IP过一下子再请求操做,以避免进对方的黑名单。
在调试了解如何一步步进行DHT网络操做后,annouce_peer过来的HASH就是真正活跃的种子文件,咱们对此保存就能够了。
其它不明白的地方,你们须要自行进行调试解决,分析代码是最好的老师,dht.c dht.h文件可能被我注释了一些地方,你们本身进行对比,尽可能使用原代码。
至于如何从DHT网络直接下载种子文件,须要分析BT种子协议,但通过测试,发现比直接从HTTP网站下载来得慢,直接HTTP下载快不少。
从DHT网络直接下载种子文件对应的协议说明:
http://www.bittorrent.org/beps/bep_0009.html
http://www.bittorrent.org/beps/bep_0010.html
但愿你们多多推荐哦...