日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java dht 爬虫_DHT爬虫(golang版-附源码)

發(fā)布時間:2024/8/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java dht 爬虫_DHT爬虫(golang版-附源码) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

簡介

DHT爬蟲要做的事情,首先就是要加入到DHT網(wǎng)絡(luò)中,這樣就會源源不斷收到其他節(jié)點發(fā)過來的請求,然后從中獲取種子的hash值。

那么問題來了

1: 怎么加入到DHT網(wǎng)絡(luò)中?

2: 怎么讓其他節(jié)點給你發(fā)消息?

3: 哪些請求里面包含hash信息?

看過上面的文章,大家應(yīng)該明白DHT網(wǎng)絡(luò)中節(jié)點之間的通信只有下面4種請求

ping

find_node

get_peer

announce_peer

1:加入DHT網(wǎng)絡(luò)

要加入網(wǎng)絡(luò)要給下面的根地址發(fā)消息:

"router.utorrent.com:6881",

"router.bittorrent.com:6881",

"dht.transmissionbt.com:6881",

向這幾個節(jié)點查找任意節(jié)點(發(fā)送find_node請求),然后他們會返回距離該節(jié)點最近的K個節(jié)點,那么我們再依次向K個節(jié)點查找任意節(jié)點,以此類推,就有更多的節(jié)點認(rèn)識自己。

2: 加入網(wǎng)絡(luò)后就會收到其他節(jié)點的信息,認(rèn)識的節(jié)點越多收到的消息就越多,所以爬蟲應(yīng)該盡可能讓更多的節(jié)點認(rèn)識自己

3: 要獲取的hash信息主要是來自announce_peer請求,這個請求同時還會攜帶ip和port信息,get_peer也可以得到一個hash信息,但是這個hash不能確定是否真實存在,如果我們只是想得到hash值然后通過其的軟件下載,也可以把這個hash收集起來。

另外announce_peer請求中implied_port這個字段,表示忽略參數(shù)中的port,繼續(xù)使用默認(rèn)的udp端口,這個記得處理。

得到的hash只需要hex之后,就可以通過某雷下載了

下載metadata

得到了hash需要去下載元數(shù)據(jù),元數(shù)據(jù)中包含主題名稱,以及種子包含的所有文件的名稱,這樣就可以做一些搜索了。

Bt協(xié)議調(diào)試了很久,出錯的時候認(rèn)真核對協(xié)議檢查每一個細(xì)節(jié)。(參考上面bep_0009,bep_0010的鏈接)

下載之后的信息直接保存到了elasticsearch,建立了torrent-日期的模板索引,當(dāng)機(jī)器存儲不足的時候可以刪除一些舊的數(shù)據(jù),或者遷移到別處,并對種子名和種子中包含的每個文件名稱做了全文索引,這樣一個簡單的磁力鏈接搜索器就可以運行了。不過這里只在本地用kibana進(jìn)行了測試,沒有做頁面(擔(dān)心太好用-)。

kibana測試

最后:

樓主用的騰訊云服務(wù)器,搜索的效率很低,一天也就幾百個,目前認(rèn)為效率低兩個方面的問題。

1: 服務(wù)器的上傳帶寬只有1M,每秒只能發(fā)大約1000-1300個包,收集的有效hash就很少。

2: 剛剛得到的hash信息,下載metadata的時候大多數(shù)都是timeout,這里還不清楚為什么,有了解的大佬還望告知。

總結(jié)

以上是生活随笔為你收集整理的java dht 爬虫_DHT爬虫(golang版-附源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。