ftr 0.7.0

A fast, parallel ICMP traceroute with ASN lookup, reverse DNS, and ISP detection
Documentation
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
#
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies.
#
# If you are reading this file be aware that the original Cargo.toml
# will likely look very different (and much more reasonable).
# See Cargo.toml.orig for the original contents.

[package]
edition = "2021"
rust-version = "1.85.0"
name = "ftr"
version = "0.7.0"
authors = ["David Weekly <david@weekly.org>"]
build = "build.rs"
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "A fast, parallel ICMP traceroute with ASN lookup, reverse DNS, and ISP detection"
homepage = "https://github.com/dweekly/ftr"
readme = "README.md"
keywords = [
    "traceroute",
    "icmp",
    "networking",
    "asn",
    "diagnostics",
]
categories = [
    "command-line-utilities",
    "network-programming",
]
license = "MIT"
repository = "https://github.com/dweekly/ftr"

[package.metadata.deb]
section = "net"
priority = "optional"
depends = "$auto"
maintainer = "David Weekly <david@weekly.org>"
copyright = "2025, David Weekly <david@weekly.org>"
license-file = [
    "LICENSE",
    "4",
]
extended-description = "ftr (Fast TraceRoute) is a high-performance, parallel ICMP traceroute implementation written in Rust. It features concurrent probing for faster route discovery, automatic ASN (Autonomous System Number) lookups to identify network operators, and intelligent hop classification (e.g., local networks, IXPs, CDNs)."
assets = [
    [
    "target/release/ftr",
    "usr/bin/",
    "755",
],
    [
    "README.md",
    "usr/share/doc/ftr/README",
    "644",
],
    [
    "CHANGELOG.md",
    "usr/share/doc/ftr/CHANGELOG",
    "644",
],
]

[package.metadata.cargo-machete]
ignored = []

[features]
async = ["tokio/full"]
default = ["async"]

[lib]
name = "ftr"
path = "src/lib.rs"

[[bin]]
name = "ftr"
path = "src/main.rs"

[[example]]
name = "cached_traces"
path = "examples/cached_traces.rs"

[[example]]
name = "custom_socket"
path = "examples/custom_socket.rs"

[[example]]
name = "error_handling"
path = "examples/error_handling.rs"

[[example]]
name = "parallel_traces"
path = "examples/parallel_traces.rs"

[[example]]
name = "rigorous_test"
path = "examples/rigorous_test.rs"

[[example]]
name = "service_api"
path = "examples/service_api.rs"

[[example]]
name = "simple_trace"
path = "examples/simple_trace.rs"

[[example]]
name = "test_v0_6_library"
path = "examples/test_v0_6_library.rs"

[[test]]
name = "async_multi_hop"
path = "tests/async_multi_hop.rs"

[[test]]
name = "cache_performance_test"
path = "tests/cache_performance_test.rs"

[[test]]
name = "caching_verification_test"
path = "tests/caching_verification_test.rs"

[[test]]
name = "ci_filter_test"
path = "tests/ci_filter_test.rs"

[[test]]
name = "cli_integration"
path = "tests/cli_integration.rs"

[[test]]
name = "edge_cases"
path = "tests/edge_cases.rs"

[[test]]
name = "error_handling_test"
path = "tests/error_handling_test.rs"

[[test]]
name = "event_overhead_test"
path = "tests/event_overhead_test.rs"

[[test]]
name = "freebsd_integration"
path = "tests/freebsd_integration.rs"

[[test]]
name = "freebsd_smoke"
path = "tests/freebsd_smoke.rs"

[[test]]
name = "handle_pattern_api_test"
path = "tests/handle_pattern_api_test.rs"

[[test]]
name = "handle_pattern_test"
path = "tests/handle_pattern_test.rs"

[[test]]
name = "integration_test"
path = "tests/integration_test.rs"

[[test]]
name = "linux_async_udp_debug"
path = "tests/linux_async_udp_debug.rs"

[[test]]
name = "parallel_isolation_test"
path = "tests/parallel_isolation_test.rs"

[[test]]
name = "performance_test"
path = "tests/performance_test.rs"

[[test]]
name = "quick_perf_test"
path = "tests/quick_perf_test.rs"

[[test]]
name = "service_api_integration_test"
path = "tests/service_api_integration_test.rs"

[[test]]
name = "test_ci_network"
path = "tests/test_ci_network.rs"

[[test]]
name = "traceroute_integration"
path = "tests/traceroute_integration.rs"

[[test]]
name = "v6_features_test"
path = "tests/v6_features_test.rs"

[[test]]
name = "windows_integration"
path = "tests/windows_integration.rs"

[[bench]]
name = "traceroute_bench"
path = "benches/traceroute_bench.rs"
harness = false

[dependencies.clap]
version = "4.5"
features = ["derive"]

[dependencies.getrandom]
version = "0.3"

[dependencies.ip_network]
version = "0.4.1"

[dependencies.ip_network_table]
version = "0.2.0"

[dependencies.serde]
version = "1.0"
features = ["derive"]

[dependencies.serde_json]
version = "1.0"

[dependencies.socket2]
version = "0.6"
features = ["all"]

[dependencies.thiserror]
version = "2.0"

[dependencies.tokio]
version = "1.47"
features = [
    "rt-multi-thread",
    "time",
    "net",
    "macros",
    "sync",
    "io-util",
]

[dependencies.ureq]
version = "3"
features = ["native-tls"]
default-features = false

[dev-dependencies.assert_cmd]
version = "2.0"

[dev-dependencies.criterion]
version = "0.7"
features = ["html_reports"]

[dev-dependencies.predicates]
version = "3.1"

[dev-dependencies.serde_json]
version = "1.0"

[target.'cfg(target_os = "freebsd")'.dependencies.libc]
version = "0.2"

[target.'cfg(target_os = "freebsd")'.dev-dependencies.libc]
version = "0.2"

[target.'cfg(target_os = "linux")'.dependencies.libc]
version = "0.2"

[target.'cfg(target_os = "linux")'.dependencies.ureq]
version = "3"
features = [
    "native-tls",
    "vendored",
]
default-features = false

[target.'cfg(target_os = "openbsd")'.dependencies.libc]
version = "0.2"

[target."cfg(windows)".dependencies.windows-sys]
version = "0.60"
features = [
    "Win32_NetworkManagement_IpHelper",
    "Win32_Networking_WinSock",
    "Win32_Foundation",
    "Win32_System_IO",
    "Win32_System_Threading",
    "Win32_Security",
]

[lints.clippy]
expect_used = "allow"
inefficient_to_string = "warn"
module_name_repetitions = "allow"
needless_pass_by_value = "warn"
panic = "warn"
redundant_closure_for_method_calls = "warn"
unwrap_used = "warn"

[lints.clippy.correctness]
level = "deny"
priority = -1

[lints.clippy.perf]
level = "warn"
priority = -1

[lints.clippy.style]
level = "warn"
priority = -1

[lints.clippy.suspicious]
level = "deny"
priority = -1

[lints.rust]
missing_docs = "warn"

[profile.release]
opt-level = "z"
lto = "fat"
codegen-units = 1
panic = "abort"
strip = "symbols"