nakashima723 / P2Pcrwlr

P2Pクローラ
https://twitter.com/nakashima723
Other
0 stars 0 forks source link

検証用ファイルのダウンロード時、自分のアップロード量をできるだけ低くする #9

Open nakashima723 opened 1 year ago

nakashima723 commented 1 year ago

証拠収集のさい、こちらからもアップロードを行うとマッチポンプになってしまいますので、できればアップロード量を低く設定しつつ証拠収集を行いたいところです。

GPT-4からは次のような回答が得られました。この手法が使用できるか、また十分なダウンロード速度を確保できるのか、検証が必要です。

libtorrentを使用して、アップロード量を0に設定してファイルをダウンロードすることは可能ですが、実際のアップロード量を完全に0にすることは難しいです。これは、BitTorrentプロトコルの特性上、ダウンロードを行う際に他のピアとデータを共有することが基本的に想定されているためです。

ただし、アップロード速度を極端に低く設定することで、実質的にアップロードが行われない状態を作ることは可能です。以下の方法で、libtorrentを使用してアップロード速度を低く設定することができます。

以下の例では、my_torrent_file.torrentをダウンロードするためのスクリプトを示しています。save_pathを適切な保存先に変更してください。

import libtorrent as lt
import time

def main():
    ses = lt.session()
    info = lt.torrent_info("my_torrent_file.torrent")
    h = ses.add_torrent({"ti": info, "save_path": "/path/to/save/directory"})

    # アップロード速度を1バイト/秒に制限する
    h.set_upload_limit(1)

    print("starting", h.name())

    while not h.is_seed():
        s = h.status()

        print("downloading: %.2f%% complete (down: %.1f kB/s, up: %.1f kB/s, peers: %d) %s" % (
            s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000,
            s.num_peers, s.state))

        time.sleep(1)

if __name__ == "__main__":
    main()

上記のスクリプトでは、アップロード速度を1バイト/秒に制限しています。これにより、実質的にアップロードが行われない状態を作成できます。ただし、完全にアップロードを0にすることはできません。

nakashima723 commented 1 year ago

アップロード帯域について追加の調査を行ったところ、次のような回答が得られました。

BitTorrentの「チョーキング」アルゴリズムは、ピアツーピア(P2P)ファイル共有の中核となるアルゴリズムで、効率的なファイルのやりとりを実現するために設計されています。チョーキングは、各ピアが他のピアに対してアップロードの優先順位を決めるために使用されるプロセスです。

チョーキングアルゴリズムの主な目的は以下の通りです。

アップロード帯域幅を最も効果的に使用できるピアにリソースを割り当てること。 フリーライダー(アップロードに貢献しないダウンローダー)を防ぐこと。 チョーキングアルゴリズムは、次の2つの主要なコンポーネントに基づいています。

チョーキング: 各ピアは、他のピアへのアップロードを制限(チョーク)または許可(アンチョーク)できます。ピアは、自分がアップロードする帯域幅を効果的に利用できるピアに対してアンチョークを行い、それ以外のピアに対してはチョークを行います。

オプティマルアンチョーキング: 各ピアは、一定の期間ごと(通常は10秒)にダウンロード速度を評価し、最も高速にダウンロードできるピアの上位4位に対してアンチョークを行います。これにより、帯域幅の効率的な使用が促されます。

また、チョーキングアルゴリズムにはリカプロカルアンチョーキングという概念も含まれています。これは、アップロードに貢献してくれるピアに対しては、ダウンロードを優先的に提供するという考え方です。このアルゴリズムは、アップロードに貢献しないフリーライダーに対してペナルティを与えることで(中略)

これらの情報を踏まえると、常にアップロード帯域を大きく制限しながら証拠収集を行うことは、現実的ではない可能性があります。 特に、最初にファイル全体をダウンロードする際にはある程度、帯域を開いた状態ですみやかに証拠ファイルをダウンロードするほうが良いかもしれません。実際の速度について、比較検証が必要です。

いずれにしても完了後はシード状態を維持せず、すみやかにネットワークから切断します。