Диапазоны циклов JavaScript и выполнение кода (сканер портов) - PullRequest
0 голосов
/ 27 сентября 2018

У меня проблема с вызовом функции в цикле с использованием JavaScript.Поскольку я новичок в JavaScript, я подумал, что мой подход должен быть неправильным.Может ли кто-нибудь помочь мне решить следующую проблему?

По сути, каждый раз, когда я изучаю новый язык, я пытаюсь написать в нем сканер портов.В Python я использовал цикл for для итерации по диапазону чисел, передавая их как порты хосту.Он работал нормально, и я попытался использовать тот же подход в JavaScript, с некоторым кодом подключения сокетов, который я нашел в сети:

const net = require('net');

function Scanner(host, port){
    const s = new net.Socket();
    s.setTimeout(2000, function() { s.destroy(); });
    s.connect(port, host, function () {
        console.log('Open: '+ port);
    });
    s.on('data', function(data){
        console.log(port +': ' +data);
        s.destroy();
    });
    s.on('error', function (e) {
        s.destroy();
    })
}

for(let p = 15000; p < 30000; p++){             
    let scan = new Scanner('localhost', p);
}

В приведенном выше примере я выполняю итерацию в диапазоне портов от 15000 до 30000.работать очень быстро, давая мне два результата: порт 15292 и 15393 открыты на моем тестовом виртуальном компьютере.Тем не менее, он не подбирает несколько портов в диапазоне 20000, как 27017.

Если я сужу диапазон от 25000 до 30000, он прекрасно их подбирает.Кажется, проблема в том, что когда у меня больший диапазон, код ничего не обнаруживает после нескольких попаданий.

Рассматривая некоторые другие реализации JS сканеров портов, я заметил ту же проблему.Он отлично работает, когда диапазон составляет около 5000 портов, но масштабируйте его до 20 000 или 30 000 портов, и он находит только первые несколько открытых.

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...