私があなたの質問に答え始めたとき、あなたがマグネットスキームがどのように機能するかを尋ねていることに気づきませんでした. bittorrent プロトコルに関連する部分がどのように生成されたかを知りたいと思っただけです。
マグネット uri にリストされているハッシュは、base32 でエンコードされた torrent の情報ハッシュです。情報ハッシュは、トレントのベンコードされた情報ブロックの sha1 ハッシュです。
このpython コードは、計算方法を示しています。
手元にベンコーダーがなく、クライアントから期待されるものと一致するため、これをテストするために (非常に単純な) C# 実装を作成しました。
static string CalculateInfoHash(string path)
{
// assumes info block is last entry in dictionary
var infokey = "e4:info";
var offset = File.ReadAllText(path).IndexOf(infokey) + infokey.Length;
byte[] fileHash = File.ReadAllBytes(path).Skip(offset).ToArray();
byte[] bytes;
using (SHA1 sha1 = SHA1.Create())
bytes = sha1.ComputeHash(fileHash, 0, fileHash.Length - 1); // need to remove last 'e' to compensate for bencoding
return String.Join("", bytes.Select(b => b.ToString("X2")));
}
私が理解しているように、このハッシュにはトラッカーの場所を特定する方法に関する情報は含まれていません。クライアントは他の手段 (提供されたアナウンス URL) でこれを見つける必要があります。これは、トラッカー上でトレントを別のトレントと区別するものです。
BitTorrent プロトコルに関連するものはすべて、依然としてトラッカーを中心に展開しています。それは今でも群れの間の主要な通信手段です。マグネット URI スキームは、bittorrent で使用するために特別に設計されたものではありません。これは、通信の代替形式として、あらゆる P2P プロトコルで使用されます。Bittorrent クライアントは、トレントを識別する別の方法としてマグネット リンクを受け入れるようになりました。これにより、.torrent ファイルをダウンロードする必要がなくなりました。マグネット uri はtr
、クライアントが参加できるように、アッカーを特定するためにアッカーを指定する必要があります。他のプロトコルに関する情報を含めることができますが、bittorrent プロトコルとは無関係です。bittorrent プロトコルは、最終的にトラッカーなしでは機能しません。