首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >BitTorrent磁铁链接是如何工作的?

BitTorrent磁铁链接是如何工作的?
EN

Stack Overflow用户
提问于 2010-10-02 13:27:49
回答 4查看 59K关注 0票数 177

这是我第一次使用magnet link。出于对它的工作原理的好奇,我查看了规格,但没有找到任何答案。维基说,xt的意思是“确切的主题”,后面跟着格式(在本例中是btih)和一个SHA1散列。我看到提到的base32,知道它是每个字符5位和32个字符,我发现它恰好包含160位,这正是SHA1的大小。

没有IP地址或任何东西的空间,它只是一个SHA1。那么BitTorrent客户端如何找到实际的文件呢?我打开URL Snooper查看它是否访问页面(使用TCP)或执行查找或类似操作,但什么也没有发生。我不知道客户端是如何找到同级的。这是怎么回事?

还有,的散列是什么?它是所有文件散列在一起的数组的散列吗?也许它是所需的实际torrent文件的哈希(剥离某些信息)?

在一个虚拟机中,我尝试了一个与uTorrent (新安装的)的磁铁链接,它设法找到了同级。第一个同级从何而来?它是新鲜的,没有其他的激流。

EN

回答 4

Stack Overflow用户

发布于 2011-07-16 03:25:18

我自己也对同样的问题感到好奇。阅读传输代码时,我在libtrnasmission/tr-dht.c中发现了以下内容

代码语言:javascript
复制
3248:     bootstrap_from_name( "dht.transmissionbt.com", 6881,
                               bootstrap_af(session) );

它尝试了6次,等待了40(!)两次尝试之间的秒数。我猜你可以通过删除配置文件(unix上的~/.config/transmission),并阻止所有与dht.transmissionbt.com的通信来测试它,看看会发生什么(至少等待240秒)。

因此,客户端似乎一开始就有一个内置的引导程序节点。当然,一旦它进入网络,它就不再需要引导节点了。

票数 30
EN

Stack Overflow用户

发布于 2010-10-02 14:47:19

当我开始回答你的问题时,我没有意识到你问的是磁铁计划是如何工作的。我以为你想知道与bittorrent协议相关的部分是如何生成的。

磁石uri中列出的散列是在base32中编码的torrent的信息散列。info散列是torrent的bencoded块的sha1散列。

这个python code演示了如何计算它。

我写了一个(非常幼稚的) C#实现来测试这一点,因为我手头没有一个本编码器,它符合客户端的期望。

代码语言:javascript
复制
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仍然需要指定tracker以便定位它,以便客户端可以参与。它可以包含有关其他协议的信息,但与bittorrent协议无关。没有追踪器,bittorrent协议最终将无法工作。

票数 10
EN

Stack Overflow用户

发布于 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一起使用的,但它似乎还没有定义一个新客户如何找到同行。也许有些是内置的,或者他们使用自己的家庭服务器或嵌入到客户端的已知跟踪器来获取网络中的第一个对等点。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3844502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档