DHTピアからtorrent情報を収集するBitTorrentクライアントを作った

最近のBitTorrentクライアントにはDHTと呼ばれる仕組みが実装されており、ピア間でtorrent情報をやりとりすることによりトラッカーレスでダウンロードを行うことができるようになっている。 つまり、他のユーザがダウンロードしようとしているtorrentの情報が他のピアから流れてくる。 そして、これを解析すれば自分以外のユーザが探しているtorrentの情報を得ることができる。

そこで、他のピアがDHTでリクエストしてくるtorrent情報を収集してみることにした。 しかし、torrent情報はDHT経由ではinfo_hashという20バイトのSHA-1ハッシュ値としてやり取りされるため、実際にダウンロードされるファイルが何かを調べるにはDHT経由でtorrentファイルのダウンロードまで行う必要がある。 これを一から実装するのは簡単ではないため、今回はlibtorrentライブラリベースのPython製クライアント Deluge をforkし、流れてきたtorrent情報を自動的にキューに追加する機能を実装してみた

実際に収集を行ったところ、けっこうな数のtorrentが集まってくる。 ただし仕様上、集まってくるtorrentはクライアント固有のランダムなIDに近いものが多くなるようになっているため、自分がダウンロードしているtorrentと関連するtorrentが集まってくるというわけではない。

とりあえず期待通りに動かすことができて満足した。

参考リンク