multiprobe
Enterprise-grade multi-protocol network probing library for Rust with Protocol Divergence Localization, Paris Traceroute, path analytics, MTU discovery, bufferbloat detection, and TLS analysis.
Why multiprobe?
- Paris Traceroute - ECMP-aware path tracing integrated into a unified multi-protocol probing library
- Protocol Divergence Localization - Find WHERE in the path protocols behave differently (NEW)
- Comprehensive Analytics - Jitter, MTU, bufferbloat, reordering in one crate
- Protocol Differential Score - Novel metric for cross-protocol path analysis
- Production Ready - 100+ tests, zero unsafe in public API
Features
Protocol Probes
| Probe | Description | Privileges |
|---|---|---|
| TCP | Connect probes with timing breakdown | None |
| UDP | Packet probes with response detection | None |
| ICMP | Echo requests with RTT measurement | CAP_NET_RAW |
| TLS | Handshake timing, cipher, version analysis | None |
Path Discovery
| Feature | Description |
|---|---|
| Traceroute | Standard hop-by-hop path discovery |
| Paris Traceroute | ECMP-aware traceroute (maintains flow consistency) |
| Multi-path Discovery | Find all paths through load balancers |
| Load Balancing Detection | Identify per-flow vs per-packet ECMP |
| Protocol Divergence | Find which hop causes protocol-specific failures (NEW) |
Path Analytics
| Metric | Description |
|---|---|
| Latency Stats | min/max/mean/median/p95/p99/jitter |
| Path MTU | Binary search MTU discovery |
| Bufferbloat | Latency degradation under load (A-F grading) |
| Packet Reordering | Out-of-order delivery detection |
| Bidirectional | Forward/reverse path asymmetry detection (NEW) |
Classification
| Feature | Description |
|---|---|
| Path Fingerprint | Stable hashes for path comparison |
| Protocol Differential Score | Cross-protocol behavior analysis |
| Network Behavior | ICMP filtering, asymmetric routing detection |
Installation
As a library:
[]
= "0.4"
As a CLI tool:
CLI Usage
# TCP/TLS probes
# Path discovery (requires elevated privileges)
# Latency analysis
# Multi-protocol analysis
# Bidirectional path analysis
# Protocol Divergence Localization - find where protocols fail differently
See multiprobe --help for all commands and options.
Quick Start (Library)
use Probe;
use Duration;
async
Multi-Protocol Analysis
use ;
let result = multi
.tcp
.tcp
.udp
.timeout
.send.await?;
// Per-protocol results
for probe in &result.results
// Path classification
println!;
// Protocol Differential Score
let pds = differential_score;
println!;
println!;
// Fingerprint
println!;
println!;
Paris Traceroute
Standard traceroute fails behind ECMP load balancers because it varies flow identifiers between probes. Paris Traceroute (Augustin et al., 2006) maintains constant flow IDs for consistent path discovery.
use ;
// Basic Paris Traceroute
let trace = paris
.max_hops
.timeout_per_hop
.send.await?;
println!;
println!;
println!;
println!;
for hop in &trace.hops
// With custom flow ID
let trace = paris
.flow_id
.mode
.detect_load_balancing
.send.await?;
// Discover multiple paths through load balancers
let paths = discover_paths.await?;
println!;
TLS Handshake Analysis
use Probe;
let tls = tls
.port
.timeout
.send.await?;
if tls.success else
Latency Statistics
use Probe;
let stats = latency
.samples
.interval
.send.await?;
println!;
println!;
println!;
println!;
println!;
println!;
println!;
println!;
println!;
println!;
println!;
if stats.has_high_jitter
if stats.has_packet_loss
Path MTU Discovery
use Probe;
let mtu = mtu
.min_mtu
.max_mtu
.timeout
.send.await?;
println!;
println!;
println!;
Bufferbloat Detection
use Probe;
let bloat = bufferbloat
.port
.baseline_samples
.loaded_samples
.send.await?;
println!;
println!;
println!;
println!; // A-F rating
println!;
Bidirectional Path Probing
Detect reverse-path asymmetry where packets take different ECMP paths in each direction.
Server side (run on the remote host):
use BidirectionalServer;
let server = bind.await?;
server.run.await?;
Client side:
use Probe;
let result = bidirectional
.port
.probe_count
.send.await?;
println!;
println!;
println!;
println!;
if result.asymmetric
Protocol Divergence Localization
Find WHERE in the network path different protocols start behaving differently. This is useful for diagnosing firewall rules, middlebox interference, or protocol-specific filtering.
use ;
let options = DivergenceOptions ;
let result = analyze_divergence.await?;
// Check for divergence
if let Some = result.first_divergence_hop else
// Per-hop analysis
for hop in &result.hops
// Summary metrics
println!;
println!;
Example output:
Protocol Divergence Analysis: blocked-host.example.com
Hop 1: ICMP: 192.168.1.1 (1.23ms) | TCP: 192.168.1.1 (1.45ms) | UDP: 192.168.1.1 (1.12ms)
Hop 2: ICMP: 10.0.0.1 (5.67ms) | TCP: 10.0.0.1 (5.89ms) | UDP: 10.0.0.1 (5.34ms)
Hop 3: ICMP: 172.16.0.1 (8.90ms) | TCP: * (timeout) | UDP: * (timeout) ⚠ DIVERGENCE
Protocol divergence at hop 3
Description: ICMP succeeded, TCP/UDP failed
Likely cause: Firewall or ACL blocking TCP/UDP at 172.16.0.1
Path Classification
| Classification | Description |
|---|---|
Open |
All protocols succeed |
IcmpFiltered |
ICMP blocked, TCP/UDP pass |
TcpFiltered |
ICMP passes, TCP blocked |
SelectiveFirewall |
Some ports open, some closed |
Blocked |
All protocols fail |
NatDetected |
TTL variance indicates NAT |
Protocol Differential Score
Quantifies behavioral differences across protocols:
use Classifier;
let pds = differential_score;
// Differentials (0.0 = identical, 1.0 = completely different)
println!;
println!;
println!;
// Consistency (1.0 = all protocols identical)
println!;
// Latency variance
println!;
// Interpreted behavior
use NetworkBehavior;
match pds.interpret
Load Balancing Detection
use LoadBalancingType;
let trace = paris
.detect_load_balancing
.send.await?;
match trace.load_balancing
Permissions
| Feature | Linux | macOS | Windows |
|---|---|---|---|
| TCP/UDP probes | None | None | None |
| TLS probes | None | None | None |
| Latency stats | None | None | None |
| ICMP ping | CAP_NET_RAW | root | Admin |
| Traceroute | CAP_NET_RAW | root | Admin |
| Paris Traceroute | CAP_NET_RAW | root | Admin |
| Protocol Divergence | CAP_NET_RAW | root | Admin |
| MTU Discovery | CAP_NET_RAW | root | Admin |
# Linux: Grant capability
# macOS/Linux: Run with sudo
API Reference
Probe Builders
tcp // TCP connect probe
udp // UDP probe
icmp // ICMP ping
multi // Multi-protocol
traceroute // Standard traceroute
paris // Paris Traceroute
tls // TLS handshake
latency // Latency statistics
mtu // Path MTU discovery
bufferbloat // Bufferbloat detection
Standalone Functions
paris_traceroute // Paris trace
discover_paths // Multi-path
analyze_divergence // Protocol divergence
measure_latency
discover_path_mtu
detect_bufferbloat
analyze_reordering
probe_tls
compare_tls
References
- Paris Traceroute: Augustin et al., "Avoiding traceroute anomalies with Paris traceroute" (IMC 2006)
- RFC 3550: RTP jitter calculation
- RFC 1191: Path MTU Discovery
- Bufferbloat: Gettys & Nichols, "Bufferbloat: Dark Buffers in the Internet" (2012)
License
MIT OR Apache-2.0