Ich verwende die jnca- Bibliothek, um von einem Router gesendete NetFlow-Datensätze zu sammeln. Die vom Router gesendete Version des NetFlow-Datensatzes ist Version 9.
Wenn das NetFlow-Paket vom Wireshark aus beobachtet wird, enthalten die Flusssätze mit der Vorlagen-ID 263 die Daten über Initiatoroktette und Responderoktette, mit denen die Anzahl der einem Fluss zugeordneten Bytes bestimmt werden kann.
Das Problem ist jedoch, dass diese Werte von der jcna nicht erhalten werden können. Für die Oktette wird immer Null angezeigt.
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();
}
Dies ist das Codesegment, mit dem die dOctets abgerufen werden. Dies gibt auch für die Vorlagen-ID 263 Null zurück.
Wenn es jedoch in Bezug auf die NetFlow-Vorlagen-ID 263 berechnet wird, liefert es die richtigen Daten. (gibt die Initiatoroktette an und um das Responder-Oktett 46 zu erhalten, sollte es durch 50 ersetzt werden, da die Länge des jeweiligen Datensatzes 4 Bytes beträgt)
dOctets = Util.to_number(buf, off + 46, 4)
In 46 befindet sich der Initiator Octets-Datensatz in diesem bestimmten NetFlow-Paket (unter Verwendung des Wireshark-Datensatzes).
Ist es ein Problem mit jnca? Hoffentlich kann mir jemand, der mit jcna vertraut ist, dabei helfen.
getTypeOffset
und zurückgegeben werden getTypeLen
?
Template.getTypeOffset()
scheinen relativ zum Flowset zu sein. Funktioniert das mit dem, was Sie tun? (Sie haben nicht genug Code gezeigt, um zu sagen; was ist buf
?)
java.util.Properties
in Code, der ein Low-Level-Format analysiert? Nuke aus dem Orbit. Hatte Java zum Zeitpunkt des Schreibens dieser Bibliothek keine Generika?