【问题标题】:Generate a torrent/magnet link from a single file in a torrent collection从 torrent 集合中的单个文件生成 torrent/magnet 链接
【发布时间】:2013-05-02 08:05:31
【问题描述】:

我想知道是否有可能,有一个 torrent 集合(即包含多个文件的 torrent)来提取单个文件,生成一个几乎新的 torrent/magnet 链接以仅下载该单个文件但使用相同的源(宣布等),而不是下载整个种子然后选择要下载的内容。

感谢任何提示。

【问题讨论】:

    标签: metadata bittorrent magnet-uri


    【解决方案1】:

    2019 年更新:是的,现在可以了! 2017 年发布了一份 BEP 草案,其中涵盖了磁铁 URI 的问题行为!这很棒,因为它创建了一个标准,在指向多文件 torrent 的磁铁 URI 和指向该多文件 torrent 中的单个文件的磁铁 URI 之间保持一致的 info_hash。他们将共享一个 swarm,这意味着您可以,因为问题要求“[生成] 一个几乎新的 torrent/magnet 链接以仅下载该单个文件但使用相同的源”。

    BEP 草案: http://www.bittorrent.org/beps/bep_0053.html BEP 53:“磁铁 URI 扩展 - 选择特定文件索引进行下载”

    请求文件 0、2、4 和 6 到 8 的示例 URI:

    magnet:?xt=urn:btih:HASH&dn=NAME&tr=TRACKER&so=0,2,4,6-8
    

    BEP 草案正在进入 bittorrent 库:


    2013-MAY-03 原始答案: 有时会,但不经常,因此产生的群体没有对等点。

    首先,您需要原始 .torrent 文件,因此如果您只有一个磁力 URI,则需要使用 DHT 将其解析为 .torrent。任何支持磁铁 URI 的 bittorrent 库都有该任务的代码。

    获得 .torrent 后,您需要获取与您感兴趣的文件相关的哈希值。.torrent 文件包含一个很长的字符串,每 20 个字节代表 torrent 中每个片段的哈希值。 Torrent 的片段长度是固定的,通常在 256KB 到 1MB 之间。如果文件从一个块偏移量开始,并且大小等于块大小的倍数或者是 torrent 中的最后一个文件,那么您可以重用这些哈希值。然后,您可以使用该信息创建一个新的 .torrent 文件,并从该 torrent 文件生成一个新的磁力 URI,重复使用公告或使用新的。

    种子信息结构:https://wiki.theory.org/BitTorrentSpecification#Metainfo_File_Structure

    不太可能幸运地获得该偏移量,因为片段长度通常在 256KB 和 1MB 之间变化,您有 1/262144 到 1/268435456 的机会获得该偏移量(假设文件可以从片段中的任何位置开始),所以这种情况不太可能。如果您不能重复使用哈希,则需要生成新的哈希,这意味着您不能重复使用 .torrent,并且需要下载文件以生成新的哈希。

    杀手锏是最终创建的种子有不同的info_hash。 info_hash 是描述 torrent 的信息的散列,它是对许多文件的描述,现在在您的新散列中是对单个文件的描述,因此是一个新的 torrent,因此没有人可以从中窃取。对等点根据 info_hash 聚集成群,如果您基于多文件 torrent 中的一个文件创建新的 torrent,则来自多文件 torrent 的对等点不知道它,也无法从中窃取。

    即使您有幸获得了正确的片段偏移量,您也可以创建一个没有任何人共享文件的 torrent。

    那么,您是否可以重新使用磁力 URI 并在 torrent 中指定一个文件名?不,描述 Bittorrent 如何使用磁力 URI 的 BEP 并未涵盖此行为。 http://www.bittorrent.org/beps/bep_0009.html

    【讨论】:

    • 谢谢,非常满意的回答。我以为是这样,我只是想确定一下。
    • 对不起,你能举个例子吗?这令人困惑
    • 我不再真正研究 bittorrent 代码了,所以手头没有好例子。但是,在撰写此答案 4 年后,发布了一份 BEP 草案,其中涵盖了该问题的内容。我会更新答案。 @JideGuruTheProgrammer
    • 你能指导我如何实现这个吗? @米德
    • 你能指导我如何实现这个吗? @darioguarascio
    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多