Я використовую бібліотеку jnca для збору записів NetFlow, що надсилаються маршрутизатором. Версія запису NetFlow, що надсилається маршрутизатором, - це версія 9.
Коли з Wireshark спостерігається пакет NetFlow, набори потоків з ідентифікатором шаблону 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. Це повертає нуль навіть для ідентифікатора шаблону 263.
Але коли він розраховується відносно ідентифікатора шаблону NetFlow 263, він дає правильні дані. (дає октети ініціатора і щоб отримати октет відповіді 46, слід замінити на 50, оскільки довжина конкретного запису становить 4 байти)
dOctets = Util.to_number(buf, off + 46, 4)
46 - це місце, де записаний ініціаторський октет лежить у цьому конкретному пакеті NetFlow (отриманий за допомогою запису Wireshark.)
Це проблема з jnca? Сподіваємось, хтось, хто знайомий з jcna, може допомогти мені у цьому.
getTypeOffset
і getTypeLen
?
Template.getTypeOffset()
видаються відносно потоку потоків. Чи працює це з тим, що ви робите? (Ви не показали достатньо коду, щоб сказати; що це buf
?)
java.util.Properties
код розбору формату низького рівня? Нук з орбіти. Чи Java не мала дженерики під час написання цієї бібліотеки?