基于DHT网络的BT磁力链蜘蛛源码
幾年前研究大文件的下載分發,注意到了libtorrent這個非常完善的BT下載庫,因此對BT相關協議也有了粗淺的了解。于是我用這個庫提供的接口,實現了一個DHT的蜘蛛。
我把這個蜘蛛放到美國的不限制UDP和BT協議的虛擬機上,每天大概可以采集3000-9000個BT種子的相關信息。
之所以選擇做BT蜘蛛,是因為當時淘寶上出售的各種DHT蜘蛛,都是帶網頁病毒的,會感染HTML文件,所以就干脆自己動手了,更安全些。
大概介紹一下原理:
BT種子被制作出來之后,會具有一個HASH值,這個HASH值,就可以對應出一個磁力鏈鏈接,比如:magnet:?xt=urn:btih:F5615DFB80AC995787C1B2219A75DF7805278DEA(這個F5615DFB80AC995787C1B2219A75DF7805278DEA就是HASH),只要文件內容相同,那么HASH就是固定的。
BT軟件啟動時,一般會自動連接到一個DHT網絡,這是一個分布式的UDP網絡,每臺機器維護著若干跟自己相鄰的其他BT下載者的IP(以下簡稱節點)。
當BT軟件拿到磁力鏈HASH之后,就會向周圍的節點發布消息,詢問“你有這個HASH的文件嗎?”如果被詢問的節點沒有這個文件,那么這些節點就會再向外層繼續廣播詢問,直到找到這個種子為止(為避免廣播風暴,這個廣播的最大層級會有限制)
當找到有一個節點X有這個種子后,當前機器的BT軟件就會與節點X連接,請求節點X把種子發過來,磁力鏈轉種子的工作至此完成。
當其他節點進行磁力鏈下載時,也會把HASH廣播給你,這樣你拿到了HASH,也就能順手把這個HASH轉化為種子。
這樣,全網流行的BT種子,基本你都可以拿到了。
實在看不懂原理的可以先看看這個視頻,大概了解下BT工作機制:https://www.bilibili.com/video/av57748098/
我把BT磁力鏈蜘蛛源碼傳到了GitHub,如果覺得對你有用,請不吝賜予我一個星星。
源碼地址:
https://github.com/Jobcrazy/BitTorrent-DHT-Spider
源碼是基于Linux的,相關編譯環境和方法,也有比較詳細的說明。
簡單講講main函數的代碼:
初始化libtorrent,并連接到了DHT網絡,之后添加了一個虛假的磁力鏈任務,促使libtorrent去跟其他的DHT節點聯系,來獲取其他節點正在下載的HASH信息;
監聽DHT通知,當收到新的HASH信息時,把HASH添加成BT任務,向其他節點請求種子信息;
監聽DHT通知,當收到種子信息時,把種子存到mysql數據庫里,數據庫的結構也在github里了。
當數據庫里有了數據,你需要的是一個支持中文全文搜索的引擎,來打造一個磁力鏈搜索引擎,這時候你可以通過coreseek這個開源軟件來解決。coreseek的教程網上比較好搜到,這里我就不重復了。
總結
以上是生活随笔為你收集整理的基于DHT网络的BT磁力链蜘蛛源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: L~M方法
- 下一篇: python中使用正则模板匹配结果