在node.js中捕获tsark stdout输出

Capture tshark stdout output in node.js

本文关键字:tsark stdout 输出 node js      更新时间:2023-09-26

我正在尝试从节点运行tsark,并使用以下代码检索stdout输出

var spawn = require('child_process').spawn,
    ts = spawn('tshark',
               ['-i wlan0 -I -R "wlan.fc.type == 0 && wlan.fc.subtype == 4" -e wlan.sa']
              );
ts.stdout.on('data', function (data) {
    console.log('stdout: ' + data);
});
ts.stderr.on('data', function (data) {
    console.log('stderr: ' + data);
});
ts.on('exit', function (code) {
   console.log('child process exited with code ' + code);
});

但我收到一个错误

stderr:在wlan0上捕获-I-R"wlan.fc.type==0&&wlan.fc.subtype==4"-T字段-e wlan.sa

stderr:tshark:无法启动捕获会话(不存在此类设备)。请检查以确保您有足够的权限,并且指定了正确的接口或管道。

stderr:捕获了0个数据包

如果我直接带着论点跑tshark,效果很好。

有什么可能出错的线索吗?

按照您现在调用spawn的方式,tshark将参数视为一个大引号参数,并且无法正确解析。就好像你这样称呼它:

tshark "-i wlan0 -I -R ""wlan.fc.type == 0 && wlan.fc.subtype == 4"" -e wlan.sa"

您需要做的是将传递给spawn的参数分离为参数数组中的各个项:

ts = spawn('tshark',
           ['-i', 'wlan0', '-I', '-R', 'wlan.fc.type == 0 && wlan.fc.subtype == 4', '-e', 'wlan.sa']
          );