私は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();
}
これは、dOctetsを取得するために使用されるコードセグメントです。これは、テンプレートID 263であってもゼロを返します。
ただし、NetFlowテンプレートID 263に関して計算されると、正しいデータが得られます。(イニシエーターオクテットを提供し、レスポンダーオクテットを取得するには、特定のレコードの長さが4バイトであるため、46を50に置き換える必要があります)
dOctets = Util.to_number(buf, off + 46, 4)
46は、イニシエーターオクテットレコードがその特定のNetFlowパケット内にある場所です(Wiresharkレコードを使用して取得しました)。
jncaの問題ですか?うまくいけば、jcnaに精通している誰かが私にこれについていくつかの助けを与えることができます。
getTypeOffset
とgetTypeLen
?
Template.getTypeOffset()
、フローセットに関連しているようです。これはあなたがやっていることで動作しますか?(あなたが伝えるのに十分なコードを示していませんでした;何buf
ですか?)
java.util.Properties
低レベルの形式を解析するコードに文字列型で入力しましたか?軌道からの核。このライブラリが書かれた当時、Javaにはジェネリックはありませんでしたか?