TorrentFileの中身
Last updated
Last updated
TorrentファイルはBencodingで記載されている
Trackerのアドレスが記載されている
ファイル名が記載されている
ブロックデータごとのSHA1 Hashが記載されている
無事、Bencodeのパーサーを書く事ができました。これで、 Torrentファイルの中身を解析できます。Torrentファイルの中身 を確認してみましょう。
さっそく、Torrentファイルを読み込んでみましょう。Parserを 作成していない方は、「 dart_hetimalib_test/tree/master/hetimalib_sample/TorrentFileParser」を利用してください。
読み込んで見ると以下のようなデータ構成である事がわかりま す。
Tracker サーバーのアドレスが記載されています。本アドレス のサーバー にからデータを配信してくれる端末を紹介してもらえます。
本ファイル生成したツールを示す名前のようです。
本ファイルが生成された日にちを表しているようです。
配信されているデータのサイズです。1024byte のデータである 事がわかります。
配信されているデータのファイル名です。xxx という名前であ る事が解ります。
データを配信する際に、分割するサイズです。16kb単位で分割 する事がわかります。
分割されたデータごとのHash値です。データーの正当性を判定 するのに使用します。
ひとつのファイルを配信するデータは説明した通りです。複数 のファイルをパッケージする場合は、もう少し構造が複雑にな ります。
さきほどのと比較すると、info辞書の中に、files リストが増え ています。今回の場合だと、「xxx/aaa/bbb.mp3」、「xxx/ccc/ ddd.mp3」という2つのデータが含まれている事が読み取れま す。
これらの理解できた事を整理して、理解出来ていない事を発見 しながら、Torrentファイルを作成するツールを作成してみまし ょう。無事作成できたならば、だいたいは理解できたという事 になります。既に、Bencoding のパーサーはありますから、ゴ ールは目の前です。
といった感じで、必要な情報をMapに配置して、Bencode にエ ンコードすれば完成です。
実際に作成してみると、明らかでなかった点が現れてきます。 例えば、ファイルが複数ある場合は、pieceデータをどのよう に算出するのでしょうか? まだ、明らかになっていませんでし た。2つ生成する方法を思いつきました。どちらかが、Torrent で採用されている方法だと良いのですが..。
ファイル単位で、pieceデータを作成する。
複数ファイルは結合してひとつのファイルと見なしてから、pieceデータを作成する。
実際に試してみたところ、 2の方法が採用されているようで す。具体的には、
といったコードで生成できます。
Kyorohiro work