Crate ftr

Crate ftr 

Source
Expand description

Fast TraceRoute (ftr) - A parallel traceroute implementation

This library provides high-performance traceroute functionality with support for multiple protocols, parallel probing, and rich network information enrichment.

§Features

  • Multiple protocols: ICMP, UDP, and TCP traceroute support
  • Parallel probing: Send multiple probes simultaneously for faster results
  • Rich information: Automatic ASN lookup, reverse DNS, and ISP detection
  • Flexible socket modes: Raw sockets, DGRAM sockets, or unprivileged UDP
  • Cross-platform: Works on Linux, macOS, Windows, and BSD systems
  • Caching: Built-in caching for DNS and ASN lookups to improve performance

§Quick Start

use ftr::{Ftr, TracerouteConfig};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create an Ftr instance
    let ftr = Ftr::new();
     
    // Simple trace with defaults
    let result = ftr.trace("google.com").await?;
     
    for hop in result.hops {
        println!("Hop {}: {:?}", hop.ttl, hop.addr);
    }
     
    Ok(())
}

§Advanced Usage

use ftr::{Ftr, TracerouteConfigBuilder, ProbeProtocol};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let ftr = Ftr::new();
     
    let config = TracerouteConfigBuilder::new()
        .target("1.1.1.1")
        .protocol(ProbeProtocol::Tcp)
        .port(443)
        .max_hops(20)
        .queries(3)
        .parallel_probes(32)
        .enable_asn_lookup(true)
        .enable_rdns(true)
        .build()?;
     
    let result = ftr.trace_with_config(config).await?;
    println!("Trace complete: {} hops", result.hops.len());
     
    Ok(())
}

§Error Handling

The library provides structured error types through the TracerouteError enum, allowing for programmatic error handling without string parsing:

use ftr::{Ftr, TracerouteError};

let ftr = Ftr::new();
match ftr.trace("example.com").await {
    Ok(result) => println!("Success! Found {} hops", result.hop_count()),
     
    // Permission errors include structured information
    Err(TracerouteError::InsufficientPermissions { required, suggestion }) => {
        eprintln!("Permission denied: {}", required);
        eprintln!("Try: {}", suggestion);
    }
     
    // Feature not implemented errors
    Err(TracerouteError::NotImplemented { feature }) => {
        eprintln!("{} is not yet implemented", feature);
        // Could fall back to supported features
    }
     
    // Other structured errors
    Err(TracerouteError::Ipv6NotSupported) => {
        eprintln!("IPv6 targets are not yet supported");
    }
    Err(TracerouteError::ResolutionError(msg)) => {
        eprintln!("DNS resolution failed: {}", msg);
    }
    Err(e) => eprintln!("Error: {}", e),
}

See TracerouteError for all error variants and the examples/error_handling.rs example for comprehensive error handling patterns.

§Modules

  • asn: ASN (Autonomous System Number) lookup functionality
  • dns: Reverse DNS lookup with caching
  • public_ip: Public IP detection and ISP information
  • socket: Low-level socket implementations for different probe types
  • traceroute: Core traceroute engine and high-level API

Re-exports§

pub use socket::IpVersion;
pub use socket::ProbeMode;
pub use socket::ProbeProtocol;
pub use socket::SocketMode;
pub use traceroute::trace;
pub use traceroute::trace_with_config;
pub use traceroute::AsnInfo;
pub use traceroute::ClassifiedHopInfo;
pub use traceroute::IspInfo;
pub use traceroute::RawHopInfo;
pub use traceroute::SegmentType;
pub use traceroute::TimingConfig;
pub use traceroute::Traceroute;
pub use traceroute::TracerouteConfig;
pub use traceroute::TracerouteConfigBuilder;
pub use traceroute::TracerouteError;
pub use traceroute::TracerouteProgress;
pub use traceroute::TracerouteResult;
pub use traceroute::async_api;

Modules§

asn
ASN (Autonomous System Number) lookup functionality
caches
Centralized cache management for the Ftr library
config
Global configuration modules
dns
DNS functionality for reverse lookups
enrichment
Enrichment services for traceroute results
probe
Probe-related types for async traceroute
public_ip
Public IP detection functionality
services
Service container for the Ftr library
socket
Socket abstraction layer for multi-protocol traceroute support
traceroute
Core traceroute functionality and utilities

Macros§

debug_print
Simple debug print macro for conditional debug output
trace_time
Macro for timing traces in very verbose mode

Structs§

Ftr
Main handle for the Ftr library