摘要:種子文件有自己的文件格式,下面簡單看看種子文件的結構。字符是以這種方式編碼的字符串長度字符串。種子文件是使用編碼的,整個文件就,包含以下鍵。必選表示該種子文件的文件信息。
原文鏈接:http://luoguochun.cn/2014/09/17/bt-file-structure/
原文作者:buf1024
估計 80% 以上接觸互聯(lián)網(wǎng)的人都知道 bt 是什么東西,任何一個用 bt 下載的人都知道這樣一個概念,種子。bt 種子就是記錄了 p2p 對等網(wǎng)絡中 tracker, nodes, files 等信息,也就是說,這個種子告訴你,你要下載什么,到哪里下載。bt 種子文件有自己的文件格式,下面簡單看看 bt 種子文件的結構。
在開始之前,我們先介紹 bencode 這種編碼格式,因為 bt 種子文件,包括以后的 DHT 網(wǎng)絡中,都是用這種編碼的。網(wǎng)上有很多介紹,這里簡單再重復一遍。bencode 有 4 種數(shù)據(jù)類型: string, integer, list 和 dictionary。
string
字符是以這種方式編碼的: <字符串長度>:<字符串>。
如 hell: 4:hell
integer
整數(shù)是一這種方式編碼的: i<整數(shù)>e。
如 1999: i1999e
list
列表是一這種方式編碼的: l[數(shù)據(jù)1][數(shù)據(jù)2][數(shù)據(jù)3][…]e。
如列表 [hello, world, 101]:l5:hello5:worldi101ee
dictionary
字典是一這種方式編碼的: d[key1][value1][key2][value2][…]e,其中 key 必須是 string 而且按照字母順序排序。
如字典 {aa:100, bb:bb, cc:200}: d2:aai100e2:bb2:bb2:cci200ee
很多語言都有 bencode 的實現(xiàn),Python 版本可在 pypi 里面找到: bencode。
bt 種子文件是使用 bencode 編碼的,整個文件就 dictionary,包含以下鍵。
info, dictinary, 必選, 表示該bt種子文件的文件信息。
文件信息包括文件的公共部分
piece length, integer, 必選, 每一數(shù)據(jù)塊的長度
pieces, string, 必選, 所有數(shù)據(jù)塊的 SHA1 校驗值
publisher, string, 可選, 發(fā)布者
publisher.utf-8, string, 可選, 發(fā)布者的 UTF-8 編碼
publisher-url, string, 可選, 發(fā)布者的 URL
publisher-url.utf-8, string, 可選, 發(fā)布者的 URL 的 UTF-8 編碼
如果 bt 種子包含的是單個文件,包含以下內容
name, string, 必選, 推薦的文件名稱
name.utf-8, string, 可選, 推薦的文件名稱的 UTF-8 編碼
length, int, 必選, 文件的長度單位是字節(jié)
如果是多文件,則包含以下部分:
name, string, 必選, 推薦的文件夾名稱
name.utf-8, string, 可選, 推薦的文件名稱的 UTF-8 編碼
files, list, 必選, 文件列表,每個文件列表下面是包括每一個文件的信息,文件信息是個字典。
文件字典
length, int, 必選, 文件的長度單位是字節(jié)
path, string, 必選, 文件名稱,包含文件夾在內
path.utf-8, string, 必選, 文件名稱 UTF-8 表示,包含文件夾在內
filehash,string, 可選, 文件 hash。
ed2k, string, 可選, ed2k 信息。
announce, string, 必選, tracker 服務器的地址
announce-list, list, 可選, 可選的 tracker 服務器地址
creation date, interger, 必選, 文件創(chuàng)建時間
comment, string, 可選, bt 文件注釋
created by, string, 可選, 文件創(chuàng)建者。
上面列舉的可能不是很完整的,但是大體上主要的字段沒有重大的錯誤。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37416.html
摘要:閑話不多說了,接下來談談網(wǎng)絡爬蟲吧。根據(jù)中的到指定端口使用擴展協(xié)議進行數(shù)據(jù)的交換即下載下載成功,解析出種子文件列表信息入庫。具體實現(xiàn)請參考我的開源項目代碼如有問題,歡迎指正,僅供技術交流,切勿用作非法商業(yè)用途。 演示地址: https://dodder.cc 三年前,照著 Python 版的 DHT 網(wǎng)絡爬蟲用 Java 重寫了一遍,當時大學還未畢業(yè),寫出來的代碼比較雜亂,數(shù)據(jù)跑到 1...
摘要:其中,文件信息里有以下內容區(qū)指定該種子包含的文件數(shù)量文件大小及目錄結構,包括目錄名和文件名字段指定頂層目錄名字每個段的大小協(xié)議把一個文件分成很多個小段,然后分段下載段哈希值將整個種子種,每個段的哈希值拼在一起。 【前五篇】系列文章傳送門: 網(wǎng)絡協(xié)議 10 - Socket 編程(上):實踐是檢驗真理的唯一標準 網(wǎng)絡協(xié)議 11 - Socket 編程(下):眼見為實耳聽為虛 網(wǎng)絡協(xié)議 ...
摘要:其中,文件信息里有以下內容區(qū)指定該種子包含的文件數(shù)量文件大小及目錄結構,包括目錄名和文件名字段指定頂層目錄名字每個段的大小協(xié)議把一個文件分成很多個小段,然后分段下載段哈希值將整個種子種,每個段的哈希值拼在一起。 【前五篇】系列文章傳送門: 網(wǎng)絡協(xié)議 10 - Socket 編程(上):實踐是檢驗真理的唯一標準 網(wǎng)絡協(xié)議 11 - Socket 編程(下):眼見為實耳聽為虛 網(wǎng)絡協(xié)議 ...
閱讀 3154·2021-11-22 14:45
閱讀 3300·2019-08-29 13:11
閱讀 2306·2019-08-29 12:31
閱讀 922·2019-08-29 11:21
閱讀 2991·2019-08-29 11:09
閱讀 3617·2019-08-28 18:11
閱讀 1420·2019-08-26 13:58
閱讀 1273·2019-08-26 13:27