jnca ライブラリを使用して、ルーターから送信されたNetFlowレコードを収集しています。ルータによって送信されるNetFlowレコードのバージョンはバージョン9です。
NetFlowパケットがWiresharkから観察されると、テンプレート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に精通している人がこれについて助けてくれることを願っています。
NetFlowバージョン9レコードからのネットワーク使用情報の取得
Netflowは、Ciscoルーターに導入された機能で、IPネットワークトラフィックがインターフェイスに出入りするときにIPネットワークトラフィックを収集する機能を提供します。 Netflowが提供するデータを分析することにより、ネットワーク管理者はトラフィックの送信元と宛先、サービスクラス、輻輳の原因などを特定できます。 Netflowは、フローキャッシング、フローコレクター、データアナライザーの3つのコンポーネントで構成されています。 Netflowでは、ルーターはネットワーク使用状況の詳細をUDPパケットとして宛先の指定されたポートに転送します。