所以,我是node.js的新手,我选择使用bittorrent-dht,这似乎完全符合我的想法。
我的想法基本上是生成随机的十六进制字符串,并在DHT上进行查找,保留那些具有足够对等点的字符串,以便稍后在适当的torrent客户端中查看(在我的情况下,我使用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个不同的查找并保持&gt; 100个同行。显然,现在很少会出现任何问题...如果我降低我的期望说50个或更低的同龄人,我显然会得到更多的点击量,但是将这些哈希值提供给Tixati会导致它找不到同伴或找不到同伴但是没有连接他们(超时)。
我的问题如下:
我现在暂时把它留在我的树莓上,但我不会期待太多;或者至少在很长一段时间之前......
答案 0 :(得分:1)
赔率不大
这是轻描淡写。仅将cpu寄存器从0增加到2¹⁶⁰-1 require more energy than it takes to boil all of earth's oceans。
目前人类可以利用的技术无法实现DHT键的强力枚举。
目前,从DHT收集信息的唯一方法是收听传入的请求。这是相当低效和嘈杂的,并不是人们想要在常规最终用户机器上做的事情。在服务器上,最好使用多个IP地址,您可以使用my implementation来完成所有必要的繁重工作。