Estou usando a biblioteca jnca para coletar registros do NetFlow enviados por um roteador. A versão do registro NetFlow enviada pelo roteador é a versão 9.
Quando o pacote NetFlow é observado no Wireshark, os conjuntos de fluxos com o ID do modelo 263 contêm os dados sobre octetos iniciador e octeto respondedor, que podem ser usados para determinar o número de bytes associados a um fluxo.
Mas o problema é que esses valores não podem ser obtidos pelo jcna. Mostra sempre zero para os octetos.
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();
}
Este é o segmento de código usado para obter os dOctets. Isso retorna zero, mesmo para o ID do modelo 263.
Porém, quando é calculado com relação ao ID 263 do modelo do NetFlow, ele fornece os dados corretos. (fornece octetos do iniciador e, para obter o respondente, o octeto 46 deve ser substituído por 50, pois o comprimento do registro específico é de 4 bytes)
dOctets = Util.to_number(buf, off + 46, 4)
46 é onde o registro de iniciantes octetos está naquele pacote NetFlow específico. (Obtido usando o registro Wireshark.)
É um problema com o jnca? Felizmente, alguém familiarizado com o jcna pode me dar alguma ajuda nisso.
getTypeOffset
e getTypeLen
?
Template.getTypeOffset()
parecem ser relativas ao fluxo. Isso funciona com o que você está fazendo? (Você não mostraram código suficiente para dizer, o que é buf
?)
java.util.Properties
em sequência analisa um formato de baixo nível? Nuke da órbita. O Java não tinha genéricos no momento em que esta biblioteca foi escrita?