У меня проблема с вызовом функции в цикле с использованием 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 портов, и он находит только первые несколько открытых.
Что я делаю не так?