Sto usando la libreria jnca per raccogliere i record NetFlow inviati da un router. La versione del record NetFlow inviata dal router è la versione 9.
Quando il pacchetto NetFlow viene osservato da Wireshark, il flusso si imposta con l'ID modello 263 contiene i dati sugli ottetti dell'iniziatore e sugli ottetti del risponditore che possono essere utilizzati per determinare il numero di byte associati a un flusso.
Ma il problema è che questi valori non possono essere ottenuti dal jcna. Mostra sempre zero per gli ottetti.
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();
}
Questo è il segmento di codice che viene utilizzato per ottenere i dOctet. Questo restituisce zero anche per l'ID modello 263.
Ma quando viene calcolato rispetto all'ID modello NetFlow 263, fornisce i dati corretti. (indica gli ottetti iniziatore e per ottenere l'ottetto risponditore 46 deve essere sostituito con 50 poiché la lunghezza del record particolare è di 4 byte)
dOctets = Util.to_number(buf, off + 46, 4)
46 è dove si trova il record di Octiator Octets in quel particolare pacchetto NetFlow (ottenuto usando il record di Wireshark).
È un problema con jnca? Spero che qualcuno che abbia familiarità con JCNA possa darmi un aiuto.
getTypeOffset
e getTypeLen
?
Template.getTypeOffset()
sembrano essere relativi al flowset. Funziona con quello che stai facendo? (Non hai mostrato abbastanza codice per dirlo; cos'è buf
?)
java.util.Properties
in modo stringente nel codice che analizza un formato di basso livello? Nuke dall'orbita. Java non aveva generici al momento della stesura di questa biblioteca?