Skip to content

Commit

Permalink
Fix: Fixed bug when calcualting the enteperise field. (#110)
Browse files Browse the repository at this point in the history
Co-authored-by: mikemiles-dev <michaelmileusnich@Michaels-MacBook-Air-2.local>
  • Loading branch information
mikemiles-dev and mikemiles-dev authored Mar 4, 2025
1 parent d2fa448 commit ff0015e
Show file tree
Hide file tree
Showing 28 changed files with 680 additions and 305 deletions.
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[package]
name = "netflow_parser"
description = "Parser for Netflow Cisco V5, V7, V9, IPFIX"
version = "0.5.2"
edition = "2021"
version = "0.5.3"
edition = "2024"
authors = ["michael.mileusnich@gmail.com"]
license = "MIT OR Apache-2.0"
categories = ["encoding", "network-programming", "parser-implementations",]
Expand Down
6 changes: 6 additions & 0 deletions RELEASES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
# 0.5.3
* Fixed bug when calcualting the enteperise field.
* Now properly parses variable length fields.
* Cleanup ipfix code.
* Rust 2024 Edition.

# 0.5.2
* Can now parse enterprise fields in non options templates for IPFIX.

Expand Down
2 changes: 1 addition & 1 deletion benches/netflow_common_bench.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use criterion::{criterion_group, criterion_main, Criterion};
use criterion::{Criterion, criterion_group, criterion_main};
use netflow_parser::NetflowParser;
use std::hint::black_box;

Expand Down
2 changes: 1 addition & 1 deletion benches/netflow_ipfix_bench.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use criterion::{criterion_group, criterion_main, Criterion};
use criterion::{Criterion, criterion_group, criterion_main};
use netflow_parser::NetflowParser;
use std::hint::black_box;

Expand Down
2 changes: 1 addition & 1 deletion benches/netflow_parser_bench.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use criterion::{criterion_group, criterion_main, Criterion};
use criterion::{Criterion, criterion_group, criterion_main};
use netflow_parser::NetflowParser;
use std::hint::black_box;

Expand Down
2 changes: 1 addition & 1 deletion benches/netflow_v5_bench.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use criterion::{criterion_group, criterion_main, Criterion};
use criterion::{Criterion, criterion_group, criterion_main};
use netflow_parser::NetflowParser;
use std::hint::black_box;

Expand Down
2 changes: 1 addition & 1 deletion benches/netflow_v7_bench.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use criterion::{criterion_group, criterion_main, Criterion};
use criterion::{Criterion, criterion_group, criterion_main};
use netflow_parser::NetflowParser;
use std::hint::black_box;

Expand Down
2 changes: 1 addition & 1 deletion benches/netflow_v9_bench.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use criterion::{criterion_group, criterion_main, Criterion};
use criterion::{Criterion, criterion_group, criterion_main};
use netflow_parser::NetflowParser;
use std::hint::black_box;

Expand Down
10 changes: 6 additions & 4 deletions examples/netflow_udp_listener_multi_threaded.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ use netflow_parser::NetflowParser;
fn create_thread() -> Sender<Vec<u8>> {
let (tx, rx): (Sender<Vec<u8>>, Receiver<Vec<u8>>) = mpsc::channel();
let mut parser = NetflowParser::default();
thread::spawn(move || loop {
if let Ok(data) = rx.recv() {
let result = parser.parse_bytes(data.as_slice());
println!("{:?}", result);
thread::spawn(move || {
loop {
if let Ok(data) = rx.recv() {
let result = parser.parse_bytes(data.as_slice());
println!("{:?}", result);
}
}
});
tx
Expand Down
2 changes: 1 addition & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ use crate::netflow_common::{NetflowCommon, NetflowCommonError, NetflowCommonFlow

use static_versions::{v5::V5, v7::V7};
use variable_versions::ipfix::{IPFix, IPFixParser};
use variable_versions::v9::{V9Parser, V9};
use variable_versions::v9::{V9, V9Parser};

use crate::static_versions::v5;
use crate::static_versions::v7;
Expand Down
6 changes: 3 additions & 3 deletions src/netflow_common.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
use std::collections::BTreeMap;
use std::net::IpAddr;

use crate::NetflowPacket;
use crate::protocol::ProtocolTypes;
use crate::static_versions::{v5::V5, v7::V7};
use crate::variable_versions::data_number::FieldValue;
use crate::variable_versions::ipfix_lookup::IPFixField;
use crate::variable_versions::v9_lookup::V9Field;
use crate::variable_versions::{ipfix::IPFix, v9::V9};
use crate::NetflowPacket;

#[derive(Debug)]
pub enum NetflowCommonError {
Expand Down Expand Up @@ -513,8 +513,8 @@ mod common_tests {
length: 0,
},
body: IPFixFlowSetBody {
templates: None,
options_templates: None,
template: None,
options_template: None,
options_data: None,
data: Some(IPFixData {
data_fields: vec![BTreeMap::from([
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
source: src/tests.rs
expression: "NetflowParser::default().parse_bytes(&packet)"
---
- IPFix:
header:
version: 10
length: 48
export_time: 16909060
sequence_number: 0
observation_domain_id: 16909060
flowsets:
- header:
header_id: 2
length: 20
body:
template:
template_id: 256
field_count: 3
fields:
- field_type_number: 8
field_type: SourceIpv4address
field_length: 4
- field_type_number: 12
field_type: DestinationIpv4address
field_length: 4
- field_type_number: 65
field_type: AssignedforNetFlowv9compatibility
field_length: 0
- header:
header_id: 256
length: 12
body:
data:
data_fields:
- 0:
- SourceIpv4address
- Ip4Addr: 1.2.3.4
- 1:
- DestinationIpv4address
- Ip4Addr: 1.2.3.4
- 2:
- AssignedforNetFlowv9compatibility
- Vec: []
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ expression: "NetflowParser::default().parse_bytes(&packet)"
header_id: 2
length: 20
body:
templates:
template:
template_id: 256
field_count: 3
fields:
Expand All @@ -36,18 +36,18 @@ expression: "NetflowParser::default().parse_bytes(&packet)"
- 0:
- SourceIpv4address
- Ip4Addr: 1.2.3.4
1:
- 1:
- DestinationIpv4address
- Ip4Addr: 1.2.3.3
2:
- 2:
- PacketDeltaCount
- DataNumber: 16909058
- 0:
- SourceIpv4address
- Ip4Addr: 0.2.0.2
1:
- 1:
- DestinationIpv4address
- Ip4Addr: 0.1.2.3
2:
- 2:
- PacketDeltaCount
- DataNumber: 67438087
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ expression: parser.parse_bytes(&packet)
- 0:
- PacketDeltaCount
- DataNumber: 8
1:
- 1:
- SourceIpv4address
- Ip4Addr: 0.0.1.1
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ expression: "NetflowParser::default().parse_bytes(&packet)"
header_id: 2
length: 26
body:
templates:
template:
template_id: 260
field_count: 2
fields:
- field_type_number: 32871
field_type: Unknown
- field_type_number: 103
field_type: Enterprise
field_length: 65535
enterprise_number: 407732327
- field_type_number: 65535
field_type: Unknown
- field_type_number: 32767
field_type: Enterprise
field_length: 0
enterprise_number: 407732544
Loading

0 comments on commit ff0015e

Please sign in to comment.