这是我第一次使用magnet link。出于对它的工作原理的好奇,我查看了规格,但没有找到任何答案。维基说,xt
的意思是“确切的主题”,后面跟着格式(在本例中是btih
)和一个SHA1散列。我看到提到的base32,知道它是每个字符5位和32个字符,我发现它恰好包含160位,这正是SHA1的大小。
没有IP地址或任何东西的空间,它只是一个SHA1。那么BitTorrent客户端如何找到实际的文件呢?我打开URL Snooper查看它是否访问页面(使用TCP)或执行查找或类似操作,但什么也没有发生。我不知道客户端是如何找到同级的。这是怎么回事?
还有,的散列是什么?它是所有文件散列在一起的数组的散列吗?也许它是所需的实际torrent文件的哈希(剥离某些信息)?
在一个虚拟机中,我尝试了一个与uTorrent (新安装的)的磁铁链接,它设法找到了同级。第一个同级从何而来?它是新鲜的,没有其他的激流。
发布于 2011-07-16 03:25:18
我自己也对同样的问题感到好奇。阅读传输代码时,我在libtrnasmission/tr-dht.c
中发现了以下内容
3248: bootstrap_from_name( "dht.transmissionbt.com", 6881,
bootstrap_af(session) );
它尝试了6次,等待了40(!)两次尝试之间的秒数。我猜你可以通过删除配置文件(unix上的~/.config/transmission
),并阻止所有与dht.transmissionbt.com
的通信来测试它,看看会发生什么(至少等待240秒)。
因此,客户端似乎一开始就有一个内置的引导程序节点。当然,一旦它进入网络,它就不再需要引导节点了。
发布于 2010-10-02 14:47:19
当我开始回答你的问题时,我没有意识到你问的是磁铁计划是如何工作的。我以为你想知道与bittorrent协议相关的部分是如何生成的。
磁石uri中列出的散列是在base32中编码的torrent的信息散列。info散列是torrent的bencoded块的sha1散列。
这个python code演示了如何计算它。
我写了一个(非常幼稚的) 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协议相关的一切仍然围绕着跟踪器。它仍然是蜂群之间交流的主要手段。magnet方案并不是专门为bittorrent设计的。任何P2P协议都可以使用它作为另一种通信形式。Bittorrent客户端接受磁铁链接作为识别torrents的另一种方式,这样你就不再需要下载.torrent文件了。磁体uri仍然需要指定tr
acker以便定位它,以便客户端可以参与。它可以包含有关其他协议的信息,但与bittorrent协议无关。没有追踪器,bittorrent协议最终将无法工作。
发布于 2010-10-02 16:50:58
I finally found specification. For the first time google didnt help。(维基链接到bittorrent.com,这是主站点。我点击了developers链接,注意到右边的bittorrent.org选项卡,然后就很容易了。当你不知道它们是什么标签并且点击了很多次时,很难找到链接)。
似乎所有的torrents都有一个对等网络。您可以从跟踪器中找到同级,并在会话之间保留这些同级。该网络允许您查找对等点和其他内容。我还没有读过它是如何与magnet links一起使用的,但它似乎还没有定义一个新客户如何找到同行。也许有些是内置的,或者他们使用自己的家庭服务器或嵌入到客户端的已知跟踪器来获取网络中的第一个对等点。
https://stackoverflow.com/questions/3844502
复制相似问题