Мне интересно, как работает сайт индексации торрентов DHT. У меня есть работающий парсер inhoHashes, написанный с использованием nodejs lib. Сначала я пытался запускать за NAT, но это было неэффективно, затем я перешел на BSD-сервер с публичным IP-адресом, и все стало намного лучше. Из многих публикаций на эту тему я узнал, что лучшим решением является запуск нескольких виртуальных узлов DHT для более быстрого парсинга информационных хэшей. У меня есть код, который инициирует несколько экземпляров узлов 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.
Аарон Грюнталь, Университет прикладных наук Эсслингена
Если приведенное выше утверждение верно, значит ли это, что мои экземпляры DHT с 10 узлами будут рассматриваться как DoS-атака, и можно ли как-то оштрафовать меня? Если это правда, то как эти веб-сайты (сайт индексации торрентов DHT) решают эту проблему? Есть ли возможность запустить эффективный парсер infoHash с одним публичным IP на одном сервере? Очевидно, что чем больше экземпляров я выполняю, тем больше хэшей я получаю, но приведенное выше утверждение заставляет меня беспокоиться. Заранее большое спасибо.