我正在使用Wireshark的Tshark cmd工具捕获一些网络数据包并进行分析。为了生成工作环境,您只需要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');
它们似乎都不起作用。这是完全获得最终数据包,然后正常关闭的最佳方法。
答案 0 :(得分:0)
tshark在捕获时将始终处于解析数据包的中间。您实际上没有办法要求它在杀死它之前完成对数据包的解析。如果您希望它在某个条件后正常退出,则-a duration:NUM
将在NUM秒后停止,而-c NUM
将在NUM个数据包后停止。
如果您绝对需要用户按下“杀死”按钮时进入的数据包,为什么不等收到信号后等待100毫秒然后杀死它呢?这将捕获有问题的数据包,并且用户不会注意到它。
答案 1 :(得分:0)
function killPocess(){
ts.kill();
}
function analyzePacket(packet) {
console.log(packet.toString());
killPocess(); // kill the process as packet is received
}