如何从 node.js 中的 pcap 获取数据

How to get data from pcap in node.js

我想在node.js中获取pcap的帧数、帧时间、ip等数据。但是,我找不到任何我想要的模块。所以,我尝试使用 tshark。但是结果值被削减了。那么,如何才能得到完美的结果呢?

下面是我试过的一些细节。


var spawn = require('child_process').spawn;
var fs = require('fs');

var args = [
    '-Tfields',
    '-e', 'frame.number',
    '-e', 'frame.time',
    '-e', 'ip.src',
    '-e', 'ip.dst',
    '-e', 'ip.proto',
    '-e', 'tcp.srcport',
    '-e', 'tcp.dstport',
    '-e', 'udp.srcport',
    '-e', 'udp.srcport',
    '-e', 'udp.dstport',
    '-e', 'ip.len',
    '-E', 'header=y',
    '-r', 'smallFlows.pcap'
];

var cmd = spawn('tshark', args, {
    cwd: 'C:\Program Files\Wireshark\'
});

cmd.stdout.on('data', function(data) {
    console.log('done!');
    fs.writeFile('result.txt', data, function(err) {
        if(err) throw err;
        console.log('It\'s saved!');
    });
});

cmd.stderr.on('data', function(data) {
});

cmd.on('exit', function(code) {
    console.log('child process exited with code ' + code);
});

结果

enter image description here

您不能对传递给 data 事件处理程序的数据块的大小做出任何假设。它可以是一个字节,也可以是子进程的全部输出。

如果您只是想将输出写入文件,您可以通过管道传输它:

var cmd = spawn('tshark', args, {
  cwd: 'C:\Program Files\Wireshark\'
});
cmd.stdout.pipe(fs.createWriteStream('result.txt')).on('finish', function() {
  console.log('File completely written');
});