如何在不了解infohash的情况下从DHT节点获取infohash和torrent元数据?

时间:2017-12-25 10:11:39

标签: bittorrent kademlia

根据这个DefCon讲话Crawling BitTorrent DHTs for Fun,可以抓取BitTorrent DHT节点,从头开始构建一个torrent网站,即使其他所有torrent网站及其备份都被对手关闭。

在kademlia中,一个同伴从各种洪流网站学习信息,为每个洪流索引磁铁链接。对等体发出get_peers请求以获取当前正在下载和播种torrent的对等体列表。 节点ID 最接近infohash的dht节点将元数据返回给查询对等体。

无论如何,我需要infohash来查询对等体。那么如果没有infohash,如何在一夜之间建立一个torrent网站呢?我认为唯一可能的方法是详尽的密钥搜索。一个人必须随机生成160-bit infohash并开始查询同行,但这需要很长时间。

kademlia中是否存在远程过程调用,如get_infohashget_metadata,它允许dht节点查询相邻节点的infohash,因为这是学习infohash的唯一方法直接来自dht节点。

1 个答案:

答案 0 :(得分:0)

它被称为 DHT Infohash Indexing BitTorrent增强建议 BEP 正在考虑进行标准化。此扩展使DHT节点能够检索其他节点当前在其存储中具有的信息样本。

来自作者BEP 51

  

DHT索引已经成为可能,并且在实践中通过被动观察 get_peers 查询来完成。但这种方法效率低下,有利于拥有大量独特IP地址的索引器。它还会激励诸如欺骗节点ID和尝试污染其他节点的路由表之类的不良行为。

     

使用此扩展程序,单个节点应该能够在几个小时内调查整个DHT,而不必采用不合规行为。

     

由于它无法直接用于搜索特定的种子,因此不希望普通客户端实际使用此RPC,他们只需要支持对它的回复。相反,预期的用途是网络中的一些专用索引器将其用作构建块来创建和管理可用种子的数据库,然后通过其他方式使其可供最终用户使用,例如,作为网络服务或通过torrent Feed。

Message Format

Request:

{
    "a":
    {
        "id": <20 byte id of sending node (string)>,
        "target": <20 byte ID for nodes>,
    },
    "t": <transaction-id (string)>,
    "y": "q",
    "q": "sample_infohashes"
}

Response:

{
    "r":
    {
        "id": <20 byte id of sending node (string)>,
        "interval": <the subset refresh interval in seconds (integer)>,
        "nodes": <nodes close to 'target'>,
        "num": <number of infohashes in storage (integer)>,
        "samples": <subset of stored infohashes, N × 20 bytes (string)>
    },
    "t": <transaction-id (string)>,
    "y": "r"
}
  

像往常一样,其他BEP可能会定义其他字段。