Expand description
flowscope — passive flow & session tracking for packet capture.
Cross-platform, runtime-free library for observing what’s
happening on the wire. Pair with any source of &[u8] frames:
netring (Linux AF_PACKET / AF_XDP), pcap files, tun-tap,
eBPF, embedded.
§What’s here
Core (always on):
PacketView/Timestamp— the abstract input.FlowExtractor— turn a frame into a flow descriptor.FlowTracker— bidirectional flow accounting + TCP state machine + idle/eviction policy. Hot-cache fast path on monoflow workloads.Reassembler— sync per-(flow, side) TCP byte stream hook. Optional per-side buffer cap withOverflowPolicy(sliding-window or drop-flow).SessionParser/DatagramParser— typed L7 message parsing per flow.FlowDriver— sync wrapper combining the tracker with a reassembler factory; optional anomaly emission viaFlowDriver::with_emit_anomalies.FlowSessionDriver— sync mirror of netring’ssession_streamfor offline / no-tokio session-event consumers.
Built-in extractors and decap combinators (extractors feature):
extract::FiveTuple,extract::IpPair,extract::MacPairextract::StripVlan,extract::StripMpls,extract::InnerVxlan,extract::InnerGtpU,extract::InnerGre,extract::AutoDetectEncap,extract::FlowLabel
Protocol parsers (each behind its own feature):
| Feature | Module | What you get |
|---|---|---|
http | http | HTTP/1.x request/response parser |
tls | tls | TLS handshake observer (ClientHello/ServerHello/Alert), optional JA3 |
dns | dns | DNS-over-UDP and DNS-over-TCP message parsers + query/response correlator |
pcap | pcap | pcap file source for offline replay |
Observability (each behind its own feature, zero-cost when off):
| Feature | What you get |
|---|---|
metrics | Prometheus / OpenTelemetry counters, gauges, histograms (see obs) |
tracing | Structured events on flow lifecycle + anomalies |
§Tokio integration
For async iteration over flow / session / datagram events, see
netring’s AsyncCapture::flow_stream
/ .session_stream / .datagram_stream. Those depend on this
crate’s traits. The sync analogue for session_stream is
FlowSessionDriver.
§Re-exporting flowscope types
Crates that re-export flowscope types (netring, sister crates,
internal forks) should write intra-doc links in the bare
[`FlowSessionDriver`] form, not the explicit
[`FlowSessionDriver`](flowscope::FlowSessionDriver) form.
The explicit path duplicates what rustdoc already resolves through
the re-export and trips the redundant_explicit_links lint under
-D warnings. See recipes.md’s “Re-exporting flowscope types”
section for the worked example.
Re-exports§
pub use anomaly::DetectorScore;trackerpub use anomaly::OwnedAnomaly;trackerpub use segment_reassembler::SegmentBufferReassembler;reassemblerpub use dedup::Dedup;trackerpub use anomaly_fields::AnomalyFields;pub use anomaly_fields::KeyFields;pub use extractor::Extracted;pub use extractor::FlowExtractor;pub use extractor::L4Proto;pub use extractor::Orientation;pub use extractor::TcpFlags;pub use extractor::TcpInfo;pub use event::AnomalyKind;trackerpub use event::EndReason;trackerpub use event::FlowEvent;trackerpub use event::FlowSide;trackerpub use event::FlowState;trackerpub use event::FlowStats;trackerpub use event::OverflowPolicy;trackerpub use history::HistoryString;trackerpub use tracker::FlowEntry;trackerpub use tracker::FlowEvents;trackerpub use tracker::FlowTracker;trackerpub use tracker::FlowTrackerConfig;trackerpub use tracker::FlowTrackerStats;trackerpub use flow_driver::FlowDriver;reassemblerpub use reassembler::BufferedReassembler;reassemblerpub use reassembler::BufferedReassemblerFactory;reassemblerpub use reassembler::NoopReassembler;reassemblerpub use reassembler::NoopReassemblerFactory;reassemblerpub use reassembler::Reassembler;reassemblerpub use reassembler::ReassemblerFactory;reassemblerpub use session::AccumulatingSessionParser;sessionpub use session::BufferedFrameDrain;sessionpub use session::DatagramParser;sessionpub use session::DatagramParserFactory;sessionpub use session::FrameDrainError;sessionpub use session::PerDatagramParser;sessionpub use session::SessionEvent;sessionpub use session::SessionParser;sessionpub use session::SessionParserFactory;sessionpub use session_driver::FlowSessionDriver;reassemblerandsessionpub use datagram_driver::FlowDatagramDriver;extractorsandreassemblerandsession
Modules§
- aggregate
aggregate flowscope::aggregate— distribution / quantile primitives.- anomaly
tracker - Canonical owned anomaly value type for detector-shaped emission and retention.
- anomaly_
fields KeyFields+AnomalyFields— structured field access for emit writers (EVE, NDJSON, CSV, Zeek, custom).- correlate
tracker flowscope::correlate— generic helpers for cross-flow correlation patterns.- datagram_
driver extractorsandreassemblerandsession - Sync companion to netring’s async
datagram_stream. Wraps aFlowDriver(with a no-op reassembler factory) and adds per-flowDatagramParserdispatch. - dedup
tracker - Content-hash deduplication of packet views.
- detect
flowscope::detect— lightweight detection primitives.- dns
dns - Passive DNS parsing (UDP/53).
- driver
extractorsandreassemblerandsession flowscope::driver— the typedDriver<E>+SlotHandle<M, K>shape (plan 121).- emit
emit flowscope::emit— structured event sinks.- event
tracker - Events emitted by
crate::FlowTrackeras packets flow through it. - extract
extractors - Built-in flow extractors and decap combinators.
- extractor
FlowExtractortrait and its supporting types.- flow_
driver reassembler FlowDriver— sync wrapper that bundles aFlowTrackerwith aReassemblerFactoryand dispatches TCP segments to the right reassembler.- history
tracker - Compact lifecycle representation à la Zeek’s
conn.loghistory. - http
http - Passive HTTP/1.x observer.
- icmp
icmp - Passive ICMPv4 / ICMPv6 message parsing (plan 76).
- layers
extractors flowscope::layers— per-packet layered field access.- obs
tracker - Observability hooks —
metricscounters andtracingevents. - parser_
kinds - Re-export of every shipped parser-kind constant under one path.
- pcap
pcap - pcap file source for offline replay.
- prelude
use flowscope::prelude::*;— one import for the common types.- reassembler
reassembler - Sync TCP reassembly hooks.
- segment_
reassembler reassembler SegmentBufferReassembler— TCP reassembler with out-of-order hole-fill.- session
session - Pluggable L7 message parsers.
- session_
driver reassemblerandsession - Sync companion to netring’s async
session_stream. Wraps aFlowDriverand adds per-flowSessionParserdispatch, yieldingSessionEvents. - tcp_
state trackerand (test-helpers) - TCP state machine used internally by
crate::FlowTracker. - test_
helpers sessionand (test-helpers) - Parser stubs for downstream test crates. Gated by the
test-helpersfeature; not for production use. Parser stubs intended for downstream test crates that need aSessionParser/DatagramParserimpl but don’t care about the produced messages. - tls
tls - Passive TLS handshake observer.
- tracker
tracker FlowTracker— a hashtable of live flows with a TCP state machine and idle-timeout sweep.- well_
known flowscope::well_known— curated port → protocol label table.
Structs§
- Error
- The unified flowscope error type.
- Error
Kind - Routing-and-context kind for an
Error. - Owned
Packet View - An owned
PacketView— frame bytes in aVec<u8>plus timestamp. Useas_viewto get a borrowedPacketView<'_>. - Packet
View - What a
crate::FlowExtractoris given. - Timestamp
- Nanosecond-precision kernel timestamp.
Enums§
Traits§
- AsPacket
View - One-method trait letting any owned-packet type produce a
borrowed
PacketView. Combined withtrack(impl Into<PacketView<'_>>), it lets foreign packet types be passed straight totracker.track(&owned)/driver.track(&owned).
Type Aliases§
- Result
- Result alias used throughout flowscope.