lance0/ttl
GitHub: lance0/ttl
一款现代化的网络路径诊断工具,提供实时 TUI、多目标追踪、ECMP 检测、MTU 发现和丰富的会话导出能力,定位为超越 traceroute 和 mtr 的下一代链路分析利器。
Stars: 1261 | Forks: 73
# ttl
超越 traceroute 的网络诊断工具:支持 MTU 发现、NAT 检测、路由抖动警报、IX 识别等。

[](https://crates.io/crates/ttl)
[](https://github.com/lance0/ttl/actions/workflows/ci.yml)
[](LICENSE-MIT)
[](https://ko-fi.com/lance0)
## 快速开始
```
# 基本用法
ttl 8.8.8.8 # Linux (after setcap)
sudo ttl 8.8.8.8 # macOS/BSD (always needs sudo)
# 常用选项
ttl -p udp google.com # UDP probes
ttl --flows 8 cloudflare.com # ECMP path discovery
ttl --pmtud 1.1.1.1 # Path MTU discovery
ttl 8.8.8.8 1.1.1.1 9.9.9.9 # Multiple targets
ttl --resolve-all google.com # Trace all resolved IPs
```
有关设置说明,请参阅下方的[安装说明](#installation)。
## 功能
- **快速连续的路径监控**,提供详细的跳统计信息
- **多个同时监控的目标** - 同时追踪多个目的地
- **Paris/Dublin traceroute** - 用于 ECMP 路径枚举的多流探测
- **ECMP 分类** - 区分基于流和基于数据包的负载均衡
- **路径 MTU 发现** - 二分查找最大未分片大小
- **NAT 检测** - 识别 NAT 设备重写源端口的情况
- **路由抖动检测** - 在指示路由不稳定的路径变化时发出警报
- **丰富的信息扩展** - ASN、GeoIP、反向 DNS、IX 检测 (PeeringDB)
- 通过 ICMP 扩展进行 **MPLS 标签检测**
- 自动检测的 **ICMP、UDP、TCP 探测**
- **优秀的 TUI**,支持主题、迷你图和会话导出
- **更新通知** - 有新版本可用时显示应用内横幅
- **可脚本化** - 支持 JSON、CSV、文本报告和行分隔的 JSON 流输出
- **追踪差异对比** - 比较两个已保存的会话以查看路径和延迟变化
- **Daemon 模式 + Prometheus exporter** - 通过 `/metrics` 和 `/healthz` 进行无头连续监控
- **支持 Docker** - 官方 Dockerfile,支持优雅的 SIGTERM 关闭
有关详细文档,包括 [GeoIP](docs/FEATURES.md#geoip-location) 和 [IX 检测](docs/FEATURES.md#ix-detection) 的可选设置,请参阅 [docs/FEATURES.md](docs/FEATURES.md)。
## 安装说明
### 通过 crates.io (推荐)
需要 [Rust](https://www.rust-lang.org/tools/install):
```
# 安装 Rust(如果尚未安装)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# 安装 ttl
cargo install ttl
```
### Homebrew (macOS/Linux)
```
brew install ttl
```
可直接从 [Homebrew core](https://formulae.brew.sh/formula/ttl) 获取。(`lance0/tap/ttl` tap 仍然有效,且可能会稍快地发布新版本。)
### Alpine Linux
```
apk add ttl --repository=https://dl-cdn.alpinelinux.org/alpine/edge/testing
```
目前位于 `edge/testing` 仓库中(由社区维护)。
### Arch Linux (AUR)
```
yay -S ttl-bin
```
### Gentoo
```
emerge net-analyzer/ttl
```
### NetBSD (pkgsrc)
```
pkgin install ttl
```
或从源码安装:`cd /usr/pkgsrc/net/ttl && make install`
### NixOS / Nix
```
# 命令式安装
nix-env -iA nixpkgs.ttl
# NixOS 配置
environment.systemPackages = [ pkgs.ttl ];
# 临时 shell
nix-shell -p ttl
```
在 `nixpkgs` unstable 中可用(由社区维护)。
### 预编译二进制文件
从 [GitHub Releases](https://github.com/lance0/ttl/releases) 下载:
| 平台 | 目标 |
|----------|--------|
| Linux x86_64 | `ttl-x86_64-unknown-linux-musl.tar.gz` |
| Linux ARM64 | `ttl-aarch64-unknown-linux-gnu.tar.gz` |
| macOS Apple Silicon | `ttl-aarch64-apple-darwin.tar.gz` |
| macOS Intel | `ttl-x86_64-apple-darwin.tar.gz` |
```
# 下载、验证并安装(以 Linux x86_64 为例)
curl -LO https://github.com/lance0/ttl/releases/latest/download/ttl-x86_64-unknown-linux-musl.tar.gz
curl -LO https://github.com/lance0/ttl/releases/latest/download/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing # macOS: shasum -a 256 -c
tar xzf ttl-*.tar.gz && sudo mv ttl /usr/local/bin/
```
### Docker
每次发布时都会将多架构镜像 (amd64/arm64) 发布到 GHCR:
```
docker pull ghcr.io/lance0/ttl:latest
docker run --rm -it ghcr.io/lance0/ttl 8.8.8.8
# 使用 Prometheus metrics 进行无头监控
docker run -d -p 9090:9090 ghcr.io/lance0/ttl --daemon --prometheus :9090 8.8.8.8
```
Docker 默认授予所需的 `NET_RAW` 权限;更严格的运行时可能需要 `--cap-add NET_RAW`。
### 从源码构建
```
git clone https://github.com/lance0/ttl
cd ttl && cargo build --release
sudo cp target/release/ttl /usr/local/bin/
```
### 快速安装脚本
```
curl -fsSL https://raw.githubusercontent.com/lance0/ttl/master/install.sh | sh
```
### 权限 (Linux)
Raw sockets 需要提升的权限。最简单的方法是添加一次权限:
```
# 添加 capability(适用于任何安装位置)
sudo setcap cap_net_raw+ep $(which ttl)
# 然后无需 sudo 运行:
ttl 8.8.8.8
```
### Shell 自动补全
```
# Bash
ttl --completions bash > ~/.local/share/bash-completion/completions/ttl
# Zsh(首先将 ~/.zfunc 添加到 .zshrc 中的 fpath)
ttl --completions zsh > ~/.zfunc/_ttl
# Fish
ttl --completions fish > ~/.config/fish/completions/ttl.fish
# PowerShell(添加到 $PROFILE)
ttl --completions powershell >> $PROFILE
```
## 使用示例
### 交互式 TUI
```
ttl google.com
ttl 8.8.8.8 1.1.1.1 # Multiple targets (Tab to switch)
```
### 报告和导出
```
ttl 1.1.1.1 -c 100 --report # Text report
ttl 1.1.1.1 -c 100 --json # JSON export
ttl 1.1.1.1 -c 100 --csv # CSV export
ttl 1.1.1.1 --stream-json # Stream events as line-delimited JSON
ttl --diff before.json after.json # Compare two saved sessions
ttl --daemon --prometheus :9090 1.1.1.1 # Headless + Prometheus metrics
ttl --replay results.json # Replay saved session
ttl --replay results.json --animate # Animated replay
```
### 高级选项
```
ttl -p tcp --port 443 host # TCP probes to HTTPS
ttl --flows 4 host # ECMP path enumeration
ttl --interface eth0 host # Bind to interface
ttl --size 1400 host # Large packets for MTU testing
ttl --dscp 46 host # QoS marking (EF)
ttl --wide host # Wide mode for wider terminals
```
有关完整的 CLI 参考,请参阅 [docs/FEATURES.md](docs/FEATURES.md)。
## 实际使用案例
### 查找 VPN 中的 MTU 黑洞
VPN 隧道的 MTU 通常比预期的要低。大数据包会被静默丢弃,导致莫名其妙的连接挂起。
```
sudo ttl --pmtud vpn-gateway.example.com
```
TTL 通过二分搜索查找可正常工作的最大数据包大小。`[MTU: 1400]` 指示器准确显示了发生分片的位置。
### 检测破坏数据流的运营商级 NAT
运行多流 traceroute 却得到不一致的结果?NAT 设备可能正在重写您的源端口。
```
sudo ttl --flows 4 target.com
```
TTL 会检测返回的源端口与发送的是否匹配。`[NAT]` 指示器会向您发出警告,并且跳的详细信息会显示是哪个设备在执行重写。
### 识别互联网交换中心
准确查看您的流量在何处与其他网络对等:
```
sudo ttl cloudflare.com
```
TTL 查询 PeeringDB 以识别 IX 点。跳的详细信息视图显示 IX 名称、城市和国家。开箱即用;可选择通过设置(`s` 键)或 `PEERINGDB_API_KEY` 环境变量配置 API 密钥,以获得更高的速率限制。有关设置详情,请参阅 [docs/FEATURES.md](docs/FEATURES.md#ix-detection)。
### 捕捉路由抖动
不稳定的 BGP 或故障转移问题会导致难以捕捉的间歇性问题:
```
sudo ttl -i 0.5 production-server.com
```
TTL 会跟踪跳中响应 IP 发生变化的时间。`!` 指示器标记路由抖动,并且跳的详细信息会显示变更历史。ECMP 负载均衡则会显示 `E`,因此您可以区分真正的不稳定和预期的多路径行为。
### 检测透明代理
某些网络使用操纵 TTL 值的透明代理来拦截流量:
```
sudo ttl -p tcp --port 80 website.com
```
当检测到 TTL 操纵时,将出现 `[TTL!]` 指示器。
### 区分真实丢包和 ICMP 速率限制
第 5 跳 30% 的丢包可能是假的——路由器通常会限制 ICMP 响应的速率:
```
sudo ttl target.com
```
`[RL?]` 指示器和丢包列中的 `50%RL` 告诉您这是速率限制,而不是实际的数据包丢弃。
### 比较多个路径
```
sudo ttl 8.8.8.8 1.1.1.1 9.9.9.9
```
一次追踪多个目的地。按 `Tab` 在它们之间切换,或按 `l` 查看所有目标的列表。
### 追踪所有解析的 IP (Round-Robin DNS)
```
sudo ttl --resolve-all google.com
```
当主机名解析为多个 IP(Round-Robin DNS、CDN 负载均衡)时,追踪所有这些 IP 以比较路径。按 `l` 查看所有已解析的目标及其统计信息。
## 快捷键
| 按键 | 操作 |
|-----|--------|
| `q` / `Ctrl+C` | 退出 |
| `p` / `空格键` | 暂停/继续 |
| `r` | 重置统计信息 |
| `t` | 切换主题 |
| `w` | 切换显示模式 |
| `s` | 设置 |
| `e` | 导出 JSON |
| `?` | 帮助 |
| `u` | 关闭更新横幅 |
| `o` | 添加目标 |
| `Tab` | 下一个目标 |
| `l` | 目标列表 |
| `Enter` | 展开跳信息 |
| `←` / `→` | 回放:快进/快退 ±0.5秒 |
| `[` / `]` | 回放:快进/快退 ±5秒 |
| `+` / `-` | 回放:速度 ±0.5倍 |
| `Home` / `End` | 回放:跳至开头/结尾 |
*回放控制仅在 `--animate` 回放模式下激活。有关完整表格,请参阅 [docs/FEATURES.md](docs/FEATURES.md#replay-controls)。*
## 主题
11 种内置主题:`default`、`kawaii`、`cyber`、`dracula`、`monochrome`、`matrix`、`nord`、`gruvbox`、`catppuccin`、`tokyo_night`、`solarized`
```
ttl 1.1.1.1 --theme dracula # Start with theme
# 按 't' 循环切换主题(保存至 ~/.config/ttl/config.toml)
```
## 平台支持
| 平台 | 状态 |
|----------|--------|
| Linux | 完全支持 |
| macOS (Tahoe 26+) | 完全支持 |
| macOS (Sequoia 15) | 从源码构建* |
| FreeBSD | 实验性** |
| NetBSD | 实验性** |
| Windows (WSL2) | 完全支持 |
| Windows (原生) | 不支持 |
*预编译的二进制文件是在 `macos-latest` (Tahoe) 上构建的。旧版 macOS 可能存在显示问题 - 请使用 `cargo install ttl` 从源码编译。
**FreeBSD/NetBSD 支持是实验性的。需要 `sudo`。不支持接口绑定 (`-i`)。请在 https://github.com/lance0/ttl/issues 报告问题
### 通过 WSL2 使用 Windows
```
wsl --install # Install WSL if needed, then restart
wsl # Open Ubuntu
```
然后在 Ubuntu 中:
```
# 选项 1:通过 cargo 安装(推荐)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
cargo install ttl
sudo ~/.cargo/bin/ttl 8.8.8.8
# 选项 2:通过安装脚本使用预编译二进制文件
curl -fsSL https://raw.githubusercontent.com/lance0/ttl/master/install.sh | sh
sudo ttl 8.8.8.8
```
## 已知问题
- **macOS Sequoia 上的 iTerm2**:初始显示可能渲染不正确。按 `r` 重置,或使用 Terminal.app。
## 已知限制
### 权限
- Linux:需要 `CAP_NET_RAW` 权限或 root(参见[权限](#permissions-linux))
- macOS/FreeBSD/NetBSD:需要 root (`sudo ttl target`) - 需要 RAW sockets 才能接收来自中间路由器的 ICMP 超时报文
### 协议限制
- ICMP 探测:某些网络会过滤 ICMP,请尝试 `-p udp` 或 `-p tcp`
- TCP 探测:仅支持 SYN(无连接建立)
- UDP 探测:高端口可能会被防火墙过滤
### 多流模式
- NAT 设备可能会重写源端口,从而破坏流关联
- 检测到此情况时,`[NAT]` 指示器会发出警告
## 文档
- [功能](docs/FEATURES.md) - 详细的功能文档和 CLI 参考
- [脚本化](docs/SCRIPTING.md) - CI/CD 集成、JSON 解析、Docker 用法
- [架构](docs/ARCHITECTURE.md) - 内部设计和模块结构
- [贡献](CONTRIBUTING.md) - 开发设置和指南
- [比较](docs/COMPARISON.md) - 与类似工具的比较(包括 pathping)
- [Changelog](CHANGELOG.md) - 发布历史
- [路线图](ROADMAP.md) - 计划中的功能
## 故障排除
### "sudo: ttl: command not found"
sudo 使用受限的 PATH。请使用完整路径或将其复制到 sudo 可访问的位置:
```
# 选项 1:使用完整路径
sudo ~/.cargo/bin/ttl 8.8.8.8
# 选项 2:复制到 /usr/local/bin(一次性)
sudo cp ~/.cargo/bin/ttl /usr/local/bin/
# 选项 3:Symlink(通过 cargo install 自动更新)
sudo ln -sf ~/.cargo/bin/ttl /usr/local/bin/ttl
```
### 权限错误
Raw ICMP sockets 需要 `CAP_NET_RAW` 或 root。请参见[权限](#permissions-linux)。
### 高丢包率
尝试增加探测间隔:`ttl target -i 2.0`
某些路由器会限制 ICMP 的速率 - 请在 TUI 中查找 `[RL?]` 指示器。
### 所有跳均显示 `* * *`
检查防火墙规则、VPN 配置或尝试其他协议:`ttl -p udp target`
### 主题/配置未保留
自 v0.12.1 起,为符合 Apple 指南,macOS 上的配置目录从 `~/Library/Preferences/ttl/` 更改为 `~/Library/Application Support/ttl/`。如果您有现有配置,请将其移动:
```
mv ~/Library/Preferences/ttl ~/Library/Application\ Support/ttl
```
## 许可证
根据以下任一许可证授权:
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE))
- MIT license ([LICENSE-MIT](LICENSE-MIT))
由您选择。
标签:Rust, traceroute, TUI, 可视化界面, 情报分析, 系统运维, 网络流量审计, 网络诊断, 自定义请求头, 请求拦截, 路由分析, 通知系统