Używam jnca bibliotekę zebrać rekordy NetFlow wysyłanych przez router. Wersja rekordu NetFlow wysłana przez router to wersja 9.
Kiedy pakiet NetFlow jest obserwowany z Wireshark, zestawy przepływów o identyfikatorze szablonu 263 zawierają dane o oktetach inicjatora i oktetach odpowiedzi, które mogą być użyte do określenia liczby bajtów związanych z przepływem.
Problem w tym, że jcna nie może uzyskać tych wartości. Pokazuje zawsze zero dla oktetów.
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();
}
To jest segment kodu, który jest używany do pobierania dOctets. Zwraca to zero nawet dla szablonu o identyfikatorze 263.
Ale kiedy jest obliczany w odniesieniu do identyfikatora szablonu NetFlow 263, podaje poprawne dane. (podaje oktety inicjatora i aby otrzymać odpowiedź, oktet 46 należy zastąpić 50, ponieważ długość danego rekordu wynosi 4 bajty)
dOctets = Util.to_number(buf, off + 46, 4)
46 to miejsce, w którym rekord oktetów inicjatora znajduje się w tym konkretnym pakiecie NetFlow. (Uzyskano przy użyciu rekordu Wireshark).
Czy to problem z jnca? Mam nadzieję, że ktoś, kto zna jcna, może mi w tym pomóc.
getTypeOffset
i getTypeLen
?
Template.getTypeOffset()
wydają się być względne w stosunku do zestawu przepływów. Czy to działa z tym, co robisz? (Nie buf
java.util.Properties
w kodzie analizującym format niskiego poziomu? Nuke z orbity. Czy w momencie pisania tej biblioteki Java nie miała typów ogólnych?