Я использую библиотеку jnca для сбора записей NetFlow, отправленных маршрутизатором. Версия записи NetFlow, отправляемой маршрутизатором, - версия 9.
Когда пакет NetFlow наблюдается из Wireshark, наборы потоков с идентификатором 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 не было генериков во время написания этой библиотеки?