Comments 4
Спасибо за статью! Использую ваш код как отправную точку для своего эксперимента. Смутила вот эта строчка:

lines[ 0 ] = lines[ 0 ] + lastTcpLine;

вроде должно быть наоборот:

lines[ 0 ] = lastTcpLine + lines[ 0 ];

Так же ни в одной строчке не будет \n после split('\n'), так что можно не проверять:

if( lines[ lastTcpLineNum ].indexOf('\n') == -1 )

В итоге пришел к такому варианту (как раз последняя строка в массиве будет пустой, если весь кусок данных оканчивается \n):


let lastTcpLine = '';
tcpdump.stdout.on('data', data=>{
    let lines = `${lastTcpLine}${data}`.split('\n');
    lastTcpLine = lines.pop();
    lines.map(line=>console.log(line));
});

Еще заметил, что такой spawn копит данные по 4-8Кб, что мне не подходит, потому что я хочу сразу увидеть пакет. поэтому переписал spawn по примеру stackoverflow.com/a/27360991/1276731 на:

spawn('stdbuf', ['-oL', '-eL', 'tcpdump', '-n'])

Only those users with full accounts are able to leave comments. Log in, please.