我正在使用jnca库来收集路由器发送的NetFlow记录。路由器发送的NetFlow记录版本是版本9。
当通过Wireshark观察NetFlow数据包时,带有模板ID 263的流集合包含了有关发起方八位字节和响应方八位字节的数据,可以用于确定与流关联的字节数。
![wireshark record](https://istack.dev59.com/aYwGh.webp)
但问题在于,这些值无法通过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();
}
这是用于获取dOctets的代码片段。即使对于模板ID 263,它也会返回零。
但是,当与NetFlow模板ID 263相关联时,它会提供正确的数据。(提供了发起方八位字节,并且为了获得响应方八位字节,应将46替换为50,因为特定记录的长度为4个字节)
dOctets = Util.to_number(buf, off + 46, 4)
在该特定NetFlow数据包中,46是Initiator Octets记录所在的位置。(使用Wireshark记录获得)
这是否是jnca的问题?希望熟悉jnca的人能够给我一些帮助。
getTypeOffset
和getTypeLen
方法返回的值吗? - LukinoTemplate.getTypeOffset()
返回的偏移量似乎是相对于 flowset 的。这是否与您正在做的事情相符?(您没有展示足够的代码来判断;buf
是什么?) - rakslicejava.util.Properties
?直接从轨道上核掉。这个库编写时Java没有泛型吗? - rakslice