Итак, я новичок в node.js, я выбрал его из необходимости использовать bittorrent-dht, который, кажется, имеет все, что мне нужно для моей идеи.bittorrent-dht bruteforce hash discovery questions
Моя идея состоит в том, чтобы генерировать случайные шестнадцатеричные строки и выполнять поиск по DHT, сохранять их с достаточным количеством сверстников, чтобы потом исследовать в подходящем торрент-клиенте (в моем случае я использую Tixati).
С этой целью я написал следующий фрагмент кода, это не шикарно, я новичок в Node.js, имейте это в виду ...
const crypto = require('crypto');
function rand_string(n) {
if (n <= 0) {
return '';
}
var rs = '';
try {
rs = crypto.randomBytes(n);
rs = rs.toString('hex').slice(0,n);
/* note: could do this non-blocking, but still might fail */
}
catch(ex) {
console.log("cannot genhash");
}
return rs;
}
const min_peers = 100;
var DHT = require('bittorrent-dht');
var dht = new DHT();
var hash = [];
var abort_lookup_0;
var abort_lookup_1;
var abort_lookup_2;
var abort_lookup_3;
var peers = [];
dht.listen(63112, function() {
console.log('DHT started');
//
hash[0] = rand_string(40);
peers[0] = 0;
abort_lookup_0 = dht.lookup(hash[0]);
//
hash[1] = rand_string(40);
peers[1] = 0;
abort_lookup_1 = dht.lookup(hash[1]);
//
hash[2] = rand_string(40);
peers[2] = 0;
abort_lookup_2 = dht.lookup(hash[2]);
//
hash[3] = rand_string(40);
peers[3] = 0;
abort_lookup_3 = dht.lookup(hash[3]);
});
// this is horrible but it will probably save headaches with loops
dht.on('peer', function (peer, infoHash, from) {
if (infoHash.toString('hex') == hash[0]) peers[0]++;
if (infoHash.toString('hex') == hash[1]) peers[1]++;
if (infoHash.toString('hex') == hash[2]) peers[2]++;
if (infoHash.toString('hex') == hash[3]) peers[3]++;
//
if (peers[0] > min_peers) {
abort_lookup_0();
console.log(hash[0]);
peers[0] = 0;
hash[0] = rand_string(40);
abort_lookup_0 = dht.lookup(hash[0]);
}
//
if (peers[1] > min_peers) {
abort_lookup_1();
console.log(hash[1]);
peers[1] = 0;
hash[1] = rand_string(40);
abort_lookup_1 = dht.lookup(hash[1]);
}
//
if (peers[2] > min_peers) {
abort_lookup_2();
console.log(hash[2]);
peers[2] = 0;
hash[2] = rand_string(40);
abort_lookup_2 = dht.lookup(hash[2]);
}
//
if (peers[3] > min_peers) {
abort_lookup_3();
console.log(hash[3]);
peers[3] = 0;
hash[3] = rand_string(40);
abort_lookup_3 = dht.lookup(hash[3]);
}
})
function failedHash() {
abort_lookup_0();
hash[0] = rand_string(40);
peers[0] = 0;
abort_lookup_0 = dht.lookup(hash[0]);
//
abort_lookup_1();
hash[1] = rand_string(40);
peers[1] = 0;
abort_lookup_1 = dht.lookup(hash[1]);
//
abort_lookup_2();
hash[2] = rand_string(40);
peers[2] = 0;
abort_lookup_2 = dht.lookup(hash[2]);
//
abort_lookup_3();
hash[3] = rand_string(40);
peers[3] = 0;
abort_lookup_3 = dht.lookup(hash[3]);
}
setInterval(failedHash, 15000);
Итак, я бегу 4 различных Lookups и сохранить их с> 100 сверстниками. Очевидно, что на этот раз это редко получается. Если я опустил свои ожидания, чтобы сказать 50 сверстников или ниже, я, очевидно, получаю больше хитов, но кормление хэшей в Tixati приводит к тому, что он не находит сверстников или не находит ровесников, но не может подключиться к ним (таймаут).
Мои вопросы заключаются в следующем:
- Является ли этот код здравом уме? Я не имею в виду, это элегантно, но есть ли на самом деле явные ошибки или вещи, которые я пропускаю?
- Почему мой торрент-клиент не подключается к сверстникам для хэшей, у которых, похоже, есть сверстники? (обратите внимание: мой торрент-клиент отлично функционирует и т. д.); я натыкаюсь на некоторых странных частных/блокирующих сверстников?
- Что такое разумное минимальное число сверстников для поиска?
Сейчас я оставлю это на моей малине, но я не ожидаю многого; или, по крайней мере, не раньше, чем долгое время ...
Ваш метод является ошибочным. Возможность генерировать 160-битное случайное число, которое является реальной info_hash, настолько бесконечно мала, что это невозможно. Вирусы, которые вы видите, - это вредоносные узлы, которые дают вам поддельные сверстники. – Encombe
Я знаю, что шансы не велики, но это почему я фильтрую «шум», установив минимальное количество одноранговых узлов. –