0

我对 DHT 种子索引站点的工作方式很感兴趣。我有使用 nodejs 编写的 inhoHashes 刮板库。第一次尝试在NAT后面执行,但效率不高,然后我用公共IP去BSD服务器,事情真的好多了。在有关该主题的许多出版物中,我了解到最好的解决方案是运行多个虚拟 DHT 节点以更快地抓取 infoHash。我有启动几个 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 地址的过滤可以抵御潜在的 DoS 攻击,因此在单个 IP 地址上使用多个端口不被认为是可行的选择。相反,索引器设计为在多个主机或多宿主主机上运行。各个实例通过共享关系数据库同步它们的索引活动,该数据库存储发现的信息哈希和每个 .torrent 文件的当前处理阶段。

作者:Aaron Grunthal - 埃斯林根应用科技大学

如果上述陈述属实,是否意味着我的 10 节点 DHT 实例将被视为 DoS 攻击,我是否会受到某种惩罚?如果这是真的,那么那些网站(DHT torrent indexing site)如何处理这个问题?有没有可能在一台服务器上使用一个公共 IP 运行高效的 infoHash 刮板?显然,我执行的实例越多,我得到的哈希值就越多,但上面的语句让我担心。非常感谢您提前。

4

1 回答 1

1

如果上述陈述属实,是否意味着我的 10 节点 DHT 实例将被视为 DoS 攻击,我是否会受到某种惩罚?

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

如果这是真的,那么那些网站(DHT torrent indexing site)如何处理这个问题?

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

有没有可能在一台服务器上使用一个公共 IP 运行高效的 infoHash 刮板?

BEP 51支持从单个主机进行高效索引。

于 2020-10-04T16:25:21.087 回答