我正在尝试从节点运行tshark并使用以下代码检索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
STDRR:THARKK:无法启动捕获会话(没有这样的设备存在)。
请检查以确保您有足够的权限,并且指定了正确的接口或管道。
stderr:已捕获0个数据包
如果我直接运行tshark与参数,它工作得很好。
有什么不对劲的线索吗?

最佳答案

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

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

您需要做的是分离要传递给参数数组中的各个项的参数:
ts = spawn('tshark',
           ['-i', 'wlan0', '-I', '-R', 'wlan.fc.type == 0 && wlan.fc.subtype == 4', '-e', 'wlan.sa']
          );

关于javascript - 在node.js中捕获tshark stdout输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25828769/

10-14 03:49