High-performance network flow extractor with live capture support for edge devices
Project description
netflower
High-performance network flow extractor for edge devices.
netflower extracts bidirectional network flows — either from a live interface or from .pcap / .pcapng files — and produces 82 features compatible with the CICFlowMeter feature set.
Features
- Live capture — capture flows in real time from a network interface; flows are emitted only when complete (TCP FIN/RST or idle timeout), never cut by an arbitrary boundary
- PCAP flows to CSV — convert
.pcap/.pcapngfiles to flow-based CSV, with optional parallel processing - Edge-optimized —
dpktfor packet parsing (~10–25× faster than Scapy on ARM), Welford's online algorithm for O(1) memory per flow, batch-buffered CSV output - No extra pip dependencies for live capture — libpcap is accessed via
ctypes
Installation
pip install netflower
Live capture requires libpcap on the system:
# Linux
sudo apt install libpcap-dev
# macOS
brew install libpcap
Usage
Live capture
Captures packets from a network interface and emits each flow the moment it completes.
from netflower import capture_live
def on_flow(flow):
print(flow["src_ip"], flow["dst_ip"], flow["flow_duration"])
handle = capture_live("eth0", on_flow=on_flow)
handle.start()
# ... rest of your program ...
handle.stop()
As a context manager:
with capture_live("eth0", on_flow=on_flow) as handle:
handle.start()
import time; time.sleep(60)
Note: live capture requires root or
CAP_NET_RAWprivilege.
PCAP flows to CSV
Converts a .pcap or .pcapng file into a flow-based CSV.
from netflower import convert_pcap_to_csv
n = convert_pcap_to_csv("capture.pcap", "flows.csv")
print(f"Extracted {n} flows")
# Parallel — use all available CPUs
n = convert_pcap_to_csv("capture.pcap", "flows.csv", n_jobs=-1)
API
capture_live(interface, on_flow, **kwargs) → CaptureHandle
| Parameter | Default | Description |
|---|---|---|
interface |
— | Network interface name (e.g. "eth0") |
on_flow |
— | Callable receiving a flow dict when a flow completes |
idle_timeout |
30.0 |
Seconds of inactivity before a flow is emitted |
flow_timeout |
120.0 |
Absolute max flow duration before forced emit |
save_pcap |
False |
Save raw packets of each completed flow to a .pcap file |
pcap_dir |
None |
Directory for .pcap files (required when save_pcap=True) |
CaptureHandle exposes .start(), .stop(), and context manager support.
convert_pcap_to_csv(input_path, output_path, **kwargs) → int
| Parameter | Default | Description |
|---|---|---|
input_path |
— | Path to .pcap or .pcapng file |
output_path |
— | Path for the output .csv (created or overwritten) |
flow_timeout |
120.0 |
Seconds of inactivity before a flow is evicted |
gc_interval |
1000 |
Run idle-flow GC every N packets |
buffer_rows |
500 |
Rows buffered in memory before flushing to disk |
n_jobs |
1 |
Worker processes. -1 uses all available CPUs |
Returns the number of flow rows written.
Flow features
Both APIs produce the same 82 features per flow:
- Flow identity: source/destination IP, port, protocol, timestamp
- Duration, bytes/s, and packets/s (forward, backward, combined)
- Packet length statistics (mean, std, min, max, variance)
- Inter-arrival time statistics (flow, forward, backward)
- TCP flag counts (FIN, SYN, RST, PSH, ACK, URG, ECE, CWR)
- Active/idle period statistics
- Bulk transfer metrics (forward and backward)
- Subflow metrics
- Initial TCP window sizes
Supported formats
- pcap — standard libpcap format
- pcapng — next-generation capture format
Only IPv4 TCP and UDP flows are extracted; other protocols are silently skipped.
License
MIT — see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netflower-1.0.0.tar.gz.
File metadata
- Download URL: netflower-1.0.0.tar.gz
- Upload date:
- Size: 22.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e44b09d219d4119a5930edf31f49291d329d85db0304ade9b646fd14620e7e6
|
|
| MD5 |
ed6c6b330ee0f96d2d81ea1350195130
|
|
| BLAKE2b-256 |
ce669b02e222d5ff3e0e50af8853d2690fcc284954914e7a302757bb2f18300f
|
File details
Details for the file netflower-1.0.0-py3-none-any.whl.
File metadata
- Download URL: netflower-1.0.0-py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b84e720721f665fb7d60da35fc2fb87d3d00acdbb8585f2187f9875bdf7afce3
|
|
| MD5 |
376027597fd5140f3a67b93c36cd2fa5
|
|
| BLAKE2b-256 |
4feab222618cfed1ced071a86638f852eaa580ab6ca9bfcce50910c13ab5c411
|