DHT爬蟲(chóng)(golang版-附源碼)

前言

關(guān)于DHT網(wǎng)絡(luò)的一些原理網(wǎng)上很多绢要,這里就不搬運(yùn)了屑彻,以下鏈接可供參考
http://codemacro.com/2013/05/19/crawl-dht/
http://www.cppblog.com/kevinlynx/archive/2013/05/19/200410.html

以及協(xié)議官方的地址:
http://www.bittorrent.org/beps/bep_0005.html
http://www.bittorrent.org/beps/bep_0009.html
http://www.bittorrent.org/beps/bep_0010.html

talk is cheap,直接上代碼吧 https://github.com/dotaljyajxf/DHTsimple 歡迎點(diǎn)星

簡(jiǎn)介

DHT爬蟲(chóng)要做的事情救巷,首先就是要加入到DHT網(wǎng)絡(luò)中熙兔,這樣就會(huì)源源不斷收到其他節(jié)點(diǎn)發(fā)過(guò)來(lái)的請(qǐng)求容客,然后從中獲取種子的hash值。

那么問(wèn)題來(lái)了
1: 怎么加入到DHT網(wǎng)絡(luò)中二跋?
2: 怎么讓其他節(jié)點(diǎn)給你發(fā)消息战惊?
3: 哪些請(qǐng)求里面包含hash信息?

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

  • 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",
向這幾個(gè)節(jié)點(diǎn)查找任意節(jié)點(diǎn)(發(fā)送find_node請(qǐng)求)吞获,然后他們會(huì)返回距離該節(jié)點(diǎn)最近的K個(gè)節(jié)點(diǎn),那么我們?cè)僖来蜗騅個(gè)節(jié)點(diǎn)查找任意節(jié)點(diǎn)谚鄙,以此類推各拷,就有更多的節(jié)點(diǎn)認(rèn)識(shí)自己。

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

3: 要獲取的hash信息主要是來(lái)自announce_peer請(qǐng)求,這個(gè)請(qǐng)求同時(shí)還會(huì)攜帶ip和port信息粮坞,get_peer也可以得到一個(gè)hash信息蚊荣,但是這個(gè)hash不能確定是否真實(shí)存在,如果我們只是想得到hash值然后通過(guò)其的軟件下載莫杈,也可以把這個(gè)hash收集起來(lái)互例。
另外announce_peer請(qǐng)求中implied_port這個(gè)字段,表示忽略參數(shù)中的port筝闹,繼續(xù)使用默認(rèn)的udp端口媳叨,這個(gè)記得處理腥光。

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

下載metadata

得到了hash需要去下載元數(shù)據(jù)糊秆,元數(shù)據(jù)中包含主題名稱武福,以及種子包含的所有文件的名稱,這樣就可以做一些搜索了痘番。
Bt協(xié)議調(diào)試了很久捉片,出錯(cuò)的時(shí)候認(rèn)真核對(duì)協(xié)議檢查每一個(gè)細(xì)節(jié)。(參考上面bep_0009汞舱,bep_0010的鏈接)

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

kibana測(cè)試

最后:

樓主用的騰訊云服務(wù)器欢际,搜索的效率很低债热,一天也就幾百個(gè),目前認(rèn)為效率低兩個(gè)方面的問(wèn)題幼苛。
1: 服務(wù)器的上傳帶寬只有1M,每秒只能發(fā)大約1000-1300個(gè)包焕刮,收集的有效hash就很少舶沿。
2: 剛剛得到的hash信息,下載metadata的時(shí)候大多數(shù)都是timeout配并,這里還不清楚為什么括荡,有了解的大佬還望告知。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溉旋,一起剝皮案震驚了整個(gè)濱河市畸冲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌观腊,老刑警劉巖邑闲,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異梧油,居然都是意外死亡苫耸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門儡陨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)褪子,“玉大人量淌,你說(shuō)我怎么就攤上這事∠油剩” “怎么了呀枢?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)笼痛。 經(jīng)常有香客問(wèn)我裙秋,道長(zhǎng),這世上最難降的妖魔是什么晃痴? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任残吩,我火速辦了婚禮,結(jié)果婚禮上倘核,老公的妹妹穿的比我還像新娘泣侮。我一直安慰自己,他們只是感情好紧唱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布活尊。 她就那樣靜靜地躺著,像睡著了一般漏益。 火紅的嫁衣襯著肌膚如雪蛹锰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天绰疤,我揣著相機(jī)與錄音铜犬,去河邊找鬼。 笑死轻庆,一個(gè)胖子當(dāng)著我的面吹牛癣猾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播余爆,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼纷宇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蛾方?” 一聲冷哼從身側(cè)響起像捶,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桩砰,沒(méi)想到半個(gè)月后拓春,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亚隅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年痘儡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枢步。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沉删,死狀恐怖渐尿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矾瑰,我是刑警寧澤砖茸,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站殴穴,受9級(jí)特大地震影響凉夯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜采幌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一劲够、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧休傍,春花似錦征绎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至忙厌,卻和暖如春凫岖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逢净。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工哥放, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爹土。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓甥雕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親着饥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344