基礎知識:
torrent檔案資訊儲存格式:
bencoding是一種以簡潔格式指定和組織資料的方法。支援下列型別:位元組串、整數、列表和字典。
1 字串儲存格式: 《字串的長度》:《字串的內容》
例如: 4:abcd 表示abcd, 2:ab 表示ab
2 數字的儲存格式: i《整數》e
例如: i32e 表示整數32, i1024e 表示整數1024
3 列表的儲存格式: l《子元素》e 其中:子元素可以是字串,整數,列表和字典,或者是它們的組合體
例如: l4:asdf4:qwere 表示 [ "asdf", "qwer" ]
4 字典的儲存格式: d<...>e
其中:key只能是字串型別,value則可以是字串,整數,列表和字典,或者是它們的組合體,key和value必須是成對出現的
例如: d3:cow3:moo4:spam4:eggse 表示
d4:spaml1:a1:bee 表示
d9:publisher3:bob4:spaml1:a1:be5:counti80ee 表示
**:
1效果:using
system;
2using
system.collections.generic;
3using
system.io;
4using
system.text;
5using
npoi.openxmlformats.spreadsheet;
6using
newtonsoft.json;78
namespace922
string filename = args[0
];23
var data =torrent.decodefile(filename);
24//
console.writeline(jsonconvert.serializeobject(data, newtonsoft.json.formatting.indented));
25showdata(data);26}
2728
private
static
void
showdata(itembase data)
2949 console.writeline(kv.key + "
=" + (kv.value as
stringitem).stringdata);
50break;51
case
itemtype.number:
52 console.writeline(kv.key + "
=" + (kv.value as
numberitem).numberdata);
53break;54
}55}56
}57if (data.itemtype ==itemtype.list)
5874}75
}76}77
}7879public
class
torrent
8089}90
}9192private
static itembase decodedata(binaryreader br, stack st = null)93
110 st.push(true
);111
do112
118else
119122 } while (st.count != 0 && br.basestream.position !=br.basestream.length);
123124
return
itemls;
125case'd
'://
字典126
br.readbyte();
127var itemdic = new
dictionaryitem();
128var key =decodedata(br);
129while (key != null && br.basestream.position !=br.basestream.length)
130135
136return
itemdic;
137case'i
'://
數字138
br.readbyte();
139 b =br.readbyte();
140while (b != 'e'
)141
145return
new numberitem(long.parse(encoding.utf8.getstring(ls.toarray()))) ;
146default://
字串 147 b =br.readbyte();
148while (b != ':'
)149
153var len = int
.parse(encoding.utf8.getstring(ls.toarray()));
154var bufstr =br.readbytes(len);
155var data =encoding.utf8.getstring(bufstr);
156return
new stringitem(data) ;
157}
158}
159}
160161
public
class
itembase
162165
[jsonignore]
166public
byte rawbytes
167}
168169
public
class
stringitem : itembase
170176
public
string stringdata
177}
178public
class
numberitem : itembase
179185
public
long numberdata
186}
187188
public
class
listitem : itembase
189194
public listlistdata = new list();
195}
196197
public
class
dictionaryitem : itembase
198203
public dictionary dictionarydata = new dictionary();
204}
205206
public
enum
itemtype
207210 }
Torrent檔案結構解析
torrent檔案內的資料結構分為以下幾部分 announce tracker的主伺服器 announce list tracker伺服器列表 comment 種子檔案的注釋 comment.utf 8 種子檔案注釋的utf 8編碼 creation date 種子檔案建立的時間,是從1970年1月...
torrent檔案分析
torrent檔案資訊儲存格式 bencoding是一種以簡潔格式指定和組織資料的方法。支援下列型別 位元組串 整數 列表和字典。1 字串儲存格式 字串的長度 字串的內容 例如 4 spam 表示spam,2 ab 表示ab 2 數字的儲存格式 i 整數 e 例如 i3e 表示整數3,i1024e ...
BT種子檔案( torrent)的具體檔案結構
全部內容必須都為bencoding編碼型別。整個檔案為乙個字典結構,包含如下關鍵字 announce tracker 伺服器的 url 字串 announce list 可選 備用 tracker 伺服器列表 列表 creation date 可選 種子建立的時間,unix 標準時間格式,從 197...