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

How to get data from pcap in node.js

本文关键字:pcap 获取 数据 中从 js node      更新时间:2023-09-26

我想在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);
});
结果

输入图片描述

您不能对传递给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');
});