2016-10-14 8 views
0

Итак, я новичок в 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 приводит к тому, что он не находит сверстников или не находит ровесников, но не может подключиться к ним (таймаут).

Мои вопросы заключаются в следующем:

  • Является ли этот код здравом уме? Я не имею в виду, это элегантно, но есть ли на самом деле явные ошибки или вещи, которые я пропускаю?
  • Почему мой торрент-клиент не подключается к сверстникам для хэшей, у которых, похоже, есть сверстники? (обратите внимание: мой торрент-клиент отлично функционирует и т. д.); я натыкаюсь на некоторых странных частных/блокирующих сверстников?
  • Что такое разумное минимальное число сверстников для поиска?

Сейчас я оставлю это на моей малине, но я не ожидаю многого; или, по крайней мере, не раньше, чем долгое время ...

+1

Ваш метод является ошибочным. Возможность генерировать 160-битное случайное число, которое является реальной info_hash, настолько бесконечно мала, что это невозможно. Вирусы, которые вы видите, - это вредоносные узлы, которые дают вам поддельные сверстники. – Encombe

+0

Я знаю, что шансы не велики, но это почему я фильтрую «шум», установив минимальное количество одноранговых узлов. –

ответ

1

шансы не велики

Это мягко сказано. Простое приращение регистра cpu от 0 до 2¹⁶⁰-1 будет require more energy than it takes to boil all of earth's oceans.

Перечисление ключей DHT не может осуществляться с помощью технологий, доступных в настоящее время для человечества.

В настоящее время единственным способом сбора данных из DHT является прослушивание входящих запросов. Это довольно неэффективно и шумно, и это не то, что можно было бы сделать на обычной машине конечного пользователя. На сервере, желательно с несколькими IP-адресами, вы можете использовать my implementation, который выполняет весь необходимый тяжелый подъем.

 Смежные вопросы

  • Нет связанных вопросов^_^