回應大家的要求,特地整理了一開始自己整合的代碼,這樣最簡單,最直接的可以分析流程,至於文章裡面提供的程序界面更多,需要大家自己開發。
謝謝園子朋友的支持,已經找到個VPS進行測試,國外的服務器: h31bt.com 大家可以給提點意見...
服務器在抓取和處理同時進行,所以訪問速度慢是有些的,特別是搜索速度通過SQL的like來查詢慢,正在通過分詞改進中。。
DHT抓取程序開源地址:https://github.com/h31h31/H31DHTDEMO
數據處理程序開源地址:https://github.com/h31h31/H31DHTMgr
通過調試程序大家可以初步分析DHT網絡是如何加入的,等大家自己分析會了單一線程的方法,後面如何組織多線程應該沒有問題。
接著 [搜片神器]之DHT網絡爬蟲的代碼實現方法 這篇文章接著說明如何進入DHT網絡的原理。
1.DHT必須把自己電腦當服務器,別人才能夠知道自己是誰,所以需要通過UDP綁定端口。
2.DHT需要生成一個自己的20位ID號,當然可以通過隨機一個數值,然後通過SHA1來生成20位的ID號;
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
希望大家多多推薦哦...