DHT洪流索引网站如何有效地抓取infoHash?

问题描述

我对DHT洪流索引网站的工作方式感兴趣。我有使用nodejs lib编写的inhoHash的工作抓取器。最初,我尝试在NAT之后执行,但是效率不高,然后我使用公共IP进入BSD服务器,情况确实更好。在有关此主题的许多出版物中,我了解到最好的解决方案是运行多个虚拟DHT节点以更快地刮除infoHashes。我有一些代码可以启动几个DHT节点实例,这些实例使用唯一的NODEID并在自己的端口上运行。

我的nodejs代码

"use strict"

const DHT = require('bittorrent-dht')
const crypto = require('crypto');

let DHTnodeID = []
for(let i = 1; i<=10; i++){
  DHTnodeID.push({[i]:crypto.createHash('sha1').update(`myDHTnodeLocal${i}`).digest('hex')}) //Give each node unique hash ID
}

let dhtOpt =  {
  nodeId: '',// 160-bit DHT node ID (Buffer or hex string,default: randomly generated)
  //bootstrap: [],// bootstrap servers (default: router.bittorrent.com:6881,router.utorrent.com:6881,dht.transmissionbt.com:6881)
  host: false,// host of local peer,if specified then announces get added to local table (String,disabled by default)
  concurrency: 16,// k-rpc option to specify maximum concurrent UDP requests allowed (Number,16 by default)
  //hash: Function,// custom hash function to use (Function,SHA1 by default),//krpc: krpc(),// optional k-rpc instance
  //timeBucketoutdated: 900000,// check buckets every 15min
  //maxAge: Infinity  // optional setting for announced peers to time out
}

var dhtNodes = []
for(let i = 1; i<=DHTnodeID.length; i++){
  dhtOpt.nodeId = DHTnodeID[i-1][String(i)]
  dhtNodes.push(new DHT(dhtOpt))
}

let port = 6881 //run 10 DHT nodes
for(let item of dhtNodes){  
  item.listen(port,listenFce)
  item.on('ready',readyFce)
  item.on('announce',announceFce)

  port++
}

然后我找到了一个大学研究项目,内容如下:

最明显的提高吞吐量的方法是使用几种 DHT节点而不是一个。在单个IP地址上使用多个端口 由于基于IP地址的过滤,被认为不可行 防止潜在的DoS攻击。而是将索引器设计为运行 在多台主机或多宿主主机上。个别实例 通过共享关系同步其索引活动 存储发现的信息哈希和当前处理的数据库 每个.torrent文件的阶段。

亚伦·格伦塔尔(Aaron Grunthal)-埃斯林根应用科学大学

如果上述说法正确,那意味着我的10个节点DHT实例将被视为DoS攻击,我可以以某种方式受到惩罚吗?如果是这样,那么那些网站(DHT洪流索引网站)将如何处理此问题?是否有可能在一台服务器上使用一个公共IP运行高效的infoHash scraper?显然,我执行的实例越多,得到的哈希就越多,但是上面的语句使我感到担心。 预先非常感谢。

解决方法

如果以上说法是正确的,那意味着我的10个节点DHT实例将被视为DoS攻击,我可以以某种方式受到惩罚吗?

这取决于网络中其他节点的实现质量。高级实现将实现各种sanitizing strategies,以使其路由表免受恶意对等方的攻击。其中一种策略是每个IP地址仅允许一个路由表条目。

如果是这样,那么那些网站(DHT洪流索引网站)将如何处理此问题?

他们可能操作恶意节点,试图进入比普通节点更多的路由表,但这被上述清除策略所抵制,因此这是一种不可靠(且对生态系统有害)的策略。 它们还可以使用您引用中提到的多个IP地址进行操作。

是否有可能在一台服务器上使用一个公共IP运行高效的infoHash scraper?

BEP 51允许从单个主机进行高效索引。