Я использую инструмент Tshark cmd от Wireshark для захвата некоторых сетевых пакетов и их анализа. Для создания рабочей среды вам нужны только Wireshark 3+ и NodeJS 9+. Я использую следующий код, чтобы сократить поток Tshark в определенное время (setTimeout используется для имитации одновременного нажатия кнопки «Стоп» пользователем)
var spawn = require('child_process').spawn,
ts = spawn('tshark', ['-i', 'Wi-Fi', '-T', 'json']);
function analyzePacket(packet) {
console.log(packet.toString());
}
ts.stdout.on('data', function (packet) {
analyzePacket(packet)
});
setTimeout(function(){ ts.kill(); }, 5000);
Однако это работает хорошо, когда вызывается ts.kill();
, запись информации о пакете на экран прерывается посередине. Я хочу, чтобы tshark полностью выводил последний захваченный пакет до нажатия кнопки остановки (запускается ts.kill()). Я пробовал посылать разные виды сигналов, которые, насколько я знаю, отличаются убийственной резкостью. Это следующие:
ts.kill('SIGINT');
ts.kill('SIGHUP');
ts.kill('SIGKILL');
Кажется, ни один из них не работает. Это лучший способ полностью получить окончательный пакет, а затем изящно закрыть его.