我正在使用jnca库来收集路由器发送的NetFlow记录.路由器发送的NetFlow记录版本为9.
当从Wireshark观察NetFlow分组时,具有模板id 263的流集包含关于发起者八位字节和响应者八位字节的数据,其可用于确定与流相关联的字节数.

但问题是jcna无法获得这些值.对于八位字节,它始终显示为零.
currOffset = t.getTypeOffset(FieldDefinition.InBYTES_32);
currLen = t.getTypeLen(FieldDefinition.InBYTES_32);
if (currOffset >= 0 && currLen > 0) {
dOctets = Util.to_number(buf, off + currOffset, currLen) * t.getSamplingRate();
}
Run Code Online (Sandbox Code Playgroud)
这是用于获取dOctets的代码段.即使对于模板ID 263,这也返回零.
但是当它根据NetFlow模板ID 263计算时,它会提供正确的数据.(给出启动器八位字节并获得响应者八位字节46应该用50替换,因为特定记录的长度是4字节)
dOctets = Util.to_number(buf, off + 46, 4)
Run Code Online (Sandbox Code Playgroud)
46是Initiator Octets记录位于特定NetFlow数据包的地方.(使用Wireshark记录.)
这是jnca的问题吗?希望有些熟悉jcna的人能给我一些帮助.
我想将一些PCAP跟踪转换为Netflow格式,以便使用netflow工具进行进一步分析.有没有办法做到这一点?
具体来说,我想使用"flow-export"工具,以便从netflow跟踪中提取一些感兴趣的字段,如下所示:
$ flow-export -f2 -mUNIX_SECS,SYSUPTIME,DPKTS,DOCTETS < mynetflow.trace
Run Code Online (Sandbox Code Playgroud)
在这种情况下,通过使用以下命令转换PCAP文件来获取mynetflow.trace文件:
$ nfcapd -p 12345 -l ./
$ softflowd -n localhost:12345 -r mytrace.pcap
Run Code Online (Sandbox Code Playgroud)
这会生成一个netflow跟踪,但流量导出无法正确使用,因为它的格式不正确.我还尝试将以下命令的输出传递给flow-export,如下所示:
$ flow-import -V1 -z0 -f0 <mynetflow.trace | flow-export -f2 -mUNIX_SECS,SYSUPTIME,DPKTS,DOCTETS
Run Code Online (Sandbox Code Playgroud)
但是第一个命令的输出生成了零时间戳.
有任何想法吗?
我在 ClickHouse 表中有一些原始 JSON 数据(实际上是来自 netflow 收集器的 netflow V9),它看起来像这样:
{"AgentID":"10.1.8.1",
"Header":{"Version":9,"Count":2},
"DataSets":[
[{"I":2,"V":"231"},{"I":3,"V":"151"},{"I":8,"V":"109.195.122.130"}],
[{"I":2,"V":"341"},{"I":3,"V":"221"},{"I":8,"V":"109.195.122.233"}]
]}'
Run Code Online (Sandbox Code Playgroud)
我的任务是通过以下方式将 DataSets 数组转换为另一个 ClickHouse 表:
I2 I3 I8
-----------------------------
231 151 109.195.122.130
341 221 109.195.122.233
...
Run Code Online (Sandbox Code Playgroud)