问题描述
我对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允许从单个主机进行高效索引。