私があなたの質問に答え始めたとき、私はあなたがマグネットスキームがどのように機能するかを尋ねていることに気づいていませんでした。bittorrentプロトコルに関連する部分がどのように生成されたかを知りたいと思っただけです。
マグネットURIにリストされているハッシュは、base32でエンコードされた急流の情報ハッシュです。情報ハッシュは、急流のbencoded情報ブロックの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)を通じてこれを見つける必要があります。これは、トラッカー上で1つの急流を別の急流と区別するものです。
ビットトレントプロトコルに関連するすべてのものは、依然としてトラッカーを中心に展開しています。それはまだ群れの間のコミュニケーションの主要な手段です。マグネットuriスキームは、bittorrentで使用するために特別に設計されたものではありません。これは、通信の代替形式として任意のP2Pプロトコルで使用されます。トレントを識別するもう1つの方法として、マグネットリンクを受け入れるように構成されたBittorrentクライアントは、.torrentファイルをダウンロードする必要がなくなります。マグネットuri tr
は、クライアントが参加できるようにそれを見つけるために、acker を指定する必要があります。他のプロトコルに関する情報を含めることができますが、ビットトレントプロトコルとは無関係です。最終的に、bittorrentプロトコルはトラッカーなしでは機能しません。