Javascript сканер открытых портов - PullRequest
0 голосов
/ 05 февраля 2020

Я делаю сканер IP-портов в js, используя node.js. Я запускаю функцию с помощью команды, которая выглядит следующим образом: > getports 127.0.0.0 И я хочу увидеть все порты, которые можно использовать для отказа в обслуживании.

Вот мой код :

const { exec } = require('child_process');

exec(`netstat -an ${args[0]} | findstr "ESTABLISHED"`, (error, stdout, stderr) => {
  if(error){
    console.log(`exec error: ${error}`);
    return;
  }else if(stdout){
    console.log(`Found :\n${stdout.slice(0, 1980)}`); // I just want the 1980 first chars
    return;
  }else if(stderr){
    console.log(`stderr: ${stderr}`);
    return;
  }
});

Выполненная команда: netstat -an 127.0.0.0 | findstr "ESTABLISHED"

Я заблокирован, потому что процесс никогда не заканчивается. Так что я никогда не получаю ответ ...

1 Ответ

0 голосов
/ 05 февраля 2020
exe c

Этот метод порождает подоболочку и выполняет команду в этой оболочке и буферизует сгенерированные данные. Когда дочерний процесс завершится, функция обратного вызова будет вызываться с: буферизованными данными, когда команда будет выполнена успешно

При запуске netstat -an 127.0.0.1 из вашего cmd вы можете видеть, что команда все еще продолжает выполняться, пока вы не отправите сигнал остановки ...

Итак, если вы хотите получить вывод в буфер, я предлагаю вам создать cmd.exe и выполнить netstat.exe из этого

function run_cmd(cmd, args, cb, end) {
var spawn = require('child_process').spawn,
    child = spawn(cmd, args),
    me = this;
child.stdout.on('data', function (buffer) { cb(me, buffer) });
child.stdout.on('end', end);
}

// Run C:\Windows\System32\netstat.exe -an
var foo = new run_cmd(
    'netstat.exe', ['-an'],
    function (me, buffer) { me.stdout += buffer.toString() },
    function () { console.log(foo.stdout) }
);

что-то вроде этого

...