3个版本
0.11.0 | 2024年8月11日 |
---|---|
0.11.0-rc.2 | 2024年8月9日 |
在 网络编程 中排名 #1225
每月下载量 485
在 Trippy 中使用
1MB
18K SLoC
Trippy
Trippy 结合了traceroute和ping的功能,旨在帮助分析网络问题。
导航
功能
- 使用多种协议进行跟踪
ICMP
,UDP
&TCP
IPv4
&IPv6
- 可定制的跟踪选项
- 数据包大小 & 负载模式
- 起始和最大生存时间 (TTL)
- 最小和最大往返时间
- 轮次结束宽限期 & 最大未知跳数
- 源 & 目标端口 (
TCP
&UDP
) - 源地址和源接口
TOS
(又名DSCP + ECN
)
- 支持
classic
、paris
和dublin
等成本多路径路由 策略 (跟踪问题) - RFC4884 ICMP多部分消息
- 通用扩展对象
- MPLS标签栈
- 非特权模式
- NAT检测
- Tui界面
- 从Trippy的单个实例同时跟踪多个目标
- 跳数统计(已发送、接收、丢失%、最后、平均、最佳、最差、标准差、抖动 & 状态)
- 跳数往返时间 (RTT) 历史和频率分布图
- 具有缩放功能的交互式RTT图表,显示跟踪中所有跳数的RTT
- 交互式GeoIp世界地图
- 根据单个跟踪流进行隔离和过滤
- 可定制的颜色主题和快捷键绑定
- 可定制的列顺序和可见性
- 通过命令行参数和配置文件进行配置
- 每跳显示多个主机,并可选择限制显示主机数量和显示频率百分比
- 显示跳转详情并在每个跳转中导航主机
- 冻结/解冻Tui,重置统计信息,刷新缓存,退出时保留屏幕
- 响应式UI,可调整刷新率
- 跳转隐私
- 域名系统(DNS)
- 使用系统、外部(谷歌
8.8.8.8
或 Cloudflare1.1.1.1
)或自定义解析器 - 懒加载反向DNS查询
- 查找自治系统编号(ASN)和名称
- 使用系统、外部(谷歌
- 地理位置信息(GeoIp)
- 生成跟踪报告
json
、csv
和表格(格式化和Markdown格式)- 跟踪
flows
报告 - Graphviz
dot
图表 - 可配置的报告周期
- 在多个平台(macOS、Linux、Windows、NetBSD、FreeBSD、OpenBSD)上运行
- 具有功能意识的程序(仅限Linux)
版本
以下表格列出了可用的Trippy版本以及相应的发布说明和文档链接
版本 | 发布日期 | 状态 | 发布说明 | 文档 |
---|---|---|---|---|
0.12.0-dev | n/a | 开发中 | n/a | 文档 |
0.11.0 | n/a | 当前 | 说明 | 文档 |
0.10.0 | 2024-03-31 | 以前 | 说明 | 文档 |
0.9.0 | 2023-11-30 | 已弃用 | 说明 | 文档 |
0.8.0 | 2023-05-15 | 已弃用 | 说明 | 文档 |
0.7.0 | 2023-03-25 | 已弃用 | 说明 | 文档 |
0.6.0 | 2022-08-19 | 已弃用 | 说明 | 文档 |
[!NOTE] 仅支持Trippy当前和以前发布版本的最新补丁版本。
发行版
Cargo
cargo install trippy --locked
PPA (Ubuntu)
sudo add-apt-repository ppa:fujiapple/trippy
sudo apt update && apt install trippy
Snap (Linux)
snap install trippy
Homebrew (macOS)
brew install trippy
WinGet (Windows)
winget install trippy
Scoop (Windows)
scoop install trippy
Chocolatey (Windows)
choco install trippy
NetBSD
pkgin install trippy
FreeBSD
pkg install trippy
OpenBSD
pkg_add trippy
Pacman (Arch Linux)
pacman -S trippy
Nix
nix-env -iA trippy
Docker
docker run -it fujiapple/trippy
二进制资产下载
操作系统 | Arch | 环境 | 当前 | 以前 |
---|---|---|---|---|
Linux | x86_64 |
gnu |
0.11.0 | 0.10.0 |
Linux | x86_64 |
musl |
0.11.0 | 0.10.0 |
Linux | aarch64 |
gnu |
0.11.0 | 0.10.0 |
Linux | aarch64 |
musl |
0.11.0 | 0.10.0 |
Linux | arm7 |
gnueabihf |
0.11.0 | 0.10.0 |
Linux | arm7 |
musleabi |
0.11.0 | 0.10.0 |
Linux | arm7 |
musleabihf |
0.11.0 | 0.10.0 |
macOS | x86_64 |
darwin |
0.11.0 | 0.10.0 |
macOS | aarch64 |
darwin |
0.11.0 | 0.10.0 |
Windows | x86_64 |
msvc |
0.11.0 | 0.10.0 |
Windows | x86_64 |
gnu |
0.11.0 | 0.10.0 |
Windows | aarch64 |
msvc |
0.11.0 | 0.10.0 |
FreeBSD | x86_64 |
n/a | 0.11.0 | 0.10.0 |
NetBSD | x86_64 |
n/a | 0.11.0 | 0.10.0 |
RPM | x86_64 |
gnu |
0.11.0 | 0.10.0 |
Debian | x86_64 |
gnu |
0.11.0 | 0.10.0 |
Debian | x86_64 |
musl |
0.11.0 | 0.10.0 |
库
以下表格列出了Trippy提供的数据包。有关更多信息,请参阅数据包。
数据包 | 描述 |
---|---|
trippy | Trippy应用程序的二进制数据包和库数据包 |
trippy-core | 提供Trippy核心跟踪功能的库数据包 |
trippy-packet | 提供数据包线格式和数据包解析功能的库数据包 |
trippy-dns | 执行正向和反向懒加载DNS解析的库数据包 |
trippy-privilege | 用于发现平台权限的库数据包 |
trippy-tui | 提供Trippy终端用户界面的库数据包 |
权限
由于使用了原始套接字,Trippy通常需要提升权限。以下列出了几种启用平台所需权限的方法。在某些平台上,Trippy也可以在不提升权限的情况下使用,但有一些限制。
Unix
1: 通过 sudo
以 root
用户身份运行
sudo trip example.com
2: 以 root
用户身份运行 chown
trip
并设置 setuid
位
sudo chown root $(which trip) && sudo chmod +s $(which trip)
3: [仅限Linux] 设置 CAP_NET_RAW
能力
sudo setcap CAP_NET_RAW+p $(which trip)
[!NOTE]
Trippy是一个具有能力感知的应用程序,如果它在允许集中存在,则将CAP_NET_RAW
添加到有效集。创建原始套接字后,Trippy将丢弃所有能力。
Windows
在Windows上,Trippy必须以管理员权限运行。
非特权模式
Trippy允许在支持该功能的平台上以非特权模式运行所有跟踪模式(ICMP
、UDP
和TCP
)。
[!NOTE]目前,非特权模式仅在macOS上受支持。Linux支持是可能的,并且可能在未来添加。NetBSD、FreeBSD或Windows不支持非特权模式,因为这些平台不支持
IPPROTO_ICMP
套接字类型。有关更多信息,请参阅#101。
可以通过添加--unprivileged
(-u
)命令行标志或在配置文件的trippy
部分中添加unprivileged
条目来启用非特权模式。
[trippy]
unprivileged = true
[!NOTE]在非特权模式下不支持
paris
和dublin
ECMP
策略,因为这些策略需要操作UDP
和IP
以及头信息,这又需要使用原始套接字。
使用示例
使用默认参数的基本用法
trip example.com
不需要提升权限的跟踪(仅受支持的平台,请参阅权限)
trip example.com --unprivileged
使用udp
(或tcp
或icmp
)协议跟踪(也别名--icmp
、--udp
& --tcp
)
trip example.com -p udp
同时跟踪多个目标(仅限icmp
协议,请参阅#72)
trip example.com google.com crates.io
具有最小往返时间为250ms
和宽限期为50ms
的跟踪
trip example.com -i 250ms -g 50ms
具有自定义首次和最大time-to-live
trip example.com --first-ttl 2 --max-ttl 10
为tcp
跟踪使用自定义目标端口443
trip example.com -p tcp -P 443
为udp
跟踪使用自定义源端口5000
trip example.com -p udp -S 5000
对于具有固定源和目标端口的udp
,使用dublin
(或paris
)ECMP路由策略
trip example.com -p udp -R dublin -S 5000 -P 3500
使用自定义源地址跟踪
trip example.com -p tcp -A 127.0.0.1
使用接口en0
的IPv4地址确定源地址跟踪
trip example.com -p tcp -I en0
使用IPv6
跟踪
trip example.com -6
使用ipv4-then-ipv6
回退(或ipv6-then-ipv4
或ipv4
或ipv6
)跟踪
trip example.com --addr-family ipv4-then-ipv6
生成包含5轮数据的json
(或csv
、pretty
、markdown
)跟踪报告
trip example.com -m json -C 5
在5轮后生成TCP跟踪的所有跟踪流的Graphviz DOT
文件报告
trip example.com --tcp -m dot -C 5
在5轮后生成UDP跟踪的所有跟踪流的文本报告
trip example.com --udp -m flows -C 5
使用google
DNS解析器执行DNS查询(或cloudflare
、system
、resolv
)
trip example.com -r google
查找所有发现的IP地址的AS信息(对于system
解析器尚未提供,请参阅#66)
trip example.com -r google -z
将反向DNS查找缓存的生命周期设置为60秒
trip example.com --dns-ttl 60sec
从mmdb
文件中查找并显示short
(或long
、location
或off
)的GeoIp信息
trip example.com --geoip-mmdb-file GeoLite2-City.mmdb --tui-geoip-mode short
解析icmp
扩展
trip example.com -e
隐藏前两个跳转的IP地址、主机名和GeoIp
trip example.com --tui-privacy-max-ttl 2
自定义Tui列(见列参考)
trip example.com --tui-custom-columns holsravbwdt
自定义颜色主题
trip example.com --tui-theme-colors bg-color=blue,text-color=ffff00
列出所有可以自定义颜色主题的Tui项目
trip --print-tui-theme-items
自定义键绑定
trip example.com --tui-key-bindings previous-hop=k,next-hop=j,quit=shift-q
列出所有可以自定义键绑定的Tui命令
trip --print-tui-binding-commands
指定Trippy配置文件的位置
trip example.com --config-file /path/to/trippy.toml
生成模板配置文件
trip --print-config-template > trippy.toml
生成bash
shell自动补全(或fish
、powershell
、zsh
、elvish
)
trip --generate bash
生成ROFF
手册页
trip --generate-man
以silent
跟踪模式运行,并输出带有full
事件范围的压缩跟踪日志
trip example.com -m silent -v --log-format compact --log-span-events full
命令参考
[!NOTE] Trippy命令行参数的顺序可以是任意的,并且可以在目标和目标之前出现。
A network diagnostic tool
Usage: trip [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]...
A space delimited list of hostnames and IPs to trace
Options:
-c, --config-file <CONFIG_FILE>
Config file
-m, --mode <MODE>
Output mode [default: tui]
Possible values:
- tui: Display interactive TUI
- stream: Display a continuous stream of tracing data
- pretty: Generate a pretty text table report for N cycles
- markdown: Generate a Markdown text table report for N cycles
- csv: Generate a CSV report for N cycles
- json: Generate a JSON report for N cycles
- dot: Generate a Graphviz DOT file for N cycles
- flows: Display all flows for N cycles
- silent: Do not generate any tracing output for N cycles
-u, --unprivileged
Trace without requiring elevated privileges on supported platforms
[default: false]
-p, --protocol <PROTOCOL>
Tracing protocol [default: icmp]
Possible values:
- icmp: Internet Control Message Protocol
- udp: User Datagram Protocol
- tcp: Transmission Control Protocol
--udp
Trace using the UDP protocol
--tcp
Trace using the TCP protocol
--icmp
Trace using the ICMP protocol
-F, --addr-family <ADDR_FAMILY>
The address family [default: Ipv4thenIpv6]
Possible values:
- ipv4: Ipv4 only
- ipv6: Ipv6 only
- ipv6-then-ipv4: Ipv6 with a fallback to Ipv4
- ipv4-then-ipv6: Ipv4 with a fallback to Ipv6
-4, --ipv4
Use IPv4 only
-6, --ipv6
Use IPv6 only
-P, --target-port <TARGET_PORT>
The target port (TCP & UDP only) [default: 80]
-S, --source-port <SOURCE_PORT>
The source port (TCP & UDP only) [default: auto]
-A, --source-address <SOURCE_ADDRESS>
The source IP address [default: auto]
-I, --interface <INTERFACE>
The network interface [default: auto]
-i, --min-round-duration <MIN_ROUND_DURATION>
The minimum duration of every round [default: 1s]
-T, --max-round-duration <MAX_ROUND_DURATION>
The maximum duration of every round [default: 1s]
-g, --grace-duration <GRACE_DURATION>
The period of time to wait for additional ICMP responses after the
target has responded [default: 100ms]
--initial-sequence <INITIAL_SEQUENCE>
The initial sequence number [default: 33434]
-R, --multipath-strategy <MULTIPATH_STRATEGY>
The Equal-cost Multi-Path routing strategy (UDP only) [default:
classic]
Possible values:
- classic:
The src or dest port is used to store the sequence number
- paris:
The UDP `checksum` field is used to store the sequence number
- dublin:
The IP `identifier` field is used to store the sequence number
-U, --max-inflight <MAX_INFLIGHT>
The maximum number of in-flight ICMP echo requests [default: 24]
-f, --first-ttl <FIRST_TTL>
The TTL to start from [default: 1]
-t, --max-ttl <MAX_TTL>
The maximum number of TTL hops [default: 64]
--packet-size <PACKET_SIZE>
The size of IP packet to send (IP header + ICMP header + payload)
[default: 84]
--payload-pattern <PAYLOAD_PATTERN>
The repeating pattern in the payload of the ICMP packet [default: 0]
-Q, --tos <TOS>
The TOS (i.e. DSCP+ECN) IP header value (TCP and UDP only) [default: 0]
-e, --icmp-extensions
Parse ICMP extensions
--read-timeout <READ_TIMEOUT>
The socket read timeout [default: 10ms]
-r, --dns-resolve-method <DNS_RESOLVE_METHOD>
How to perform DNS queries [default: system]
Possible values:
- system: Resolve using the OS resolver
- resolv: Resolve using the `/etc/resolv.conf` DNS configuration
- google: Resolve using the Google `8.8.8.8` DNS service
- cloudflare: Resolve using the Cloudflare `1.1.1.1` DNS service
-y, --dns-resolve-all
Trace to all IPs resolved from DNS lookup [default: false]
--dns-timeout <DNS_TIMEOUT>
The maximum time to wait to perform DNS queries [default: 5s]
--dns-ttl <DNS_TTL>
The time-to-live (TTL) of DNS entries [default: 300s]
-z, --dns-lookup-as-info
Lookup autonomous system (AS) information during DNS queries [default:
false]
-s, --max-samples <MAX_SAMPLES>
The maximum number of samples to record per hop [default: 256]
--max-flows <MAX_FLOWS>
The maximum number of flows to record [default: 64]
-a, --tui-address-mode <TUI_ADDRESS_MODE>
How to render addresses [default: host]
Possible values:
- ip: Show IP address only
- host: Show reverse-lookup DNS hostname only
- both: Show both IP address and reverse-lookup DNS hostname
--tui-as-mode <TUI_AS_MODE>
How to render AS information [default: asn]
Possible values:
- asn: Show the ASN
- prefix: Display the AS prefix
- country-code: Display the country code
- registry: Display the registry name
- allocated: Display the allocated date
- name: Display the AS name
--tui-custom-columns <TUI_CUSTOM_COLUMNS>
Custom columns to be displayed in the TUI hops table [default:
holsravbwdt]
--tui-icmp-extension-mode <TUI_ICMP_EXTENSION_MODE>
How to render ICMP extensions [default: off]
Possible values:
- off: Do not show `icmp` extensions
- mpls: Show MPLS label(s) only
- full: Show full `icmp` extension data for all known extensions
- all: Show full `icmp` extension data for all classes
--tui-geoip-mode <TUI_GEOIP_MODE>
How to render GeoIp information [default: short]
Possible values:
- off: Do not display GeoIp data
- short: Show short format
- long: Show long format
- location: Show latitude and Longitude format
-M, --tui-max-addrs <TUI_MAX_ADDRS>
The maximum number of addresses to show per hop [default: auto]
--tui-preserve-screen
Preserve the screen on exit [default: false]
--tui-refresh-rate <TUI_REFRESH_RATE>
The Tui refresh rate [default: 100ms]
--tui-privacy-max-ttl <TUI_PRIVACY_MAX_TTL>
The maximum ttl of hops which will be masked for privacy [default: 0]
--tui-theme-colors <TUI_THEME_COLORS>
The TUI theme colors [item=color,item=color,..]
--print-tui-theme-items
Print all TUI theme items and exit
--tui-key-bindings <TUI_KEY_BINDINGS>
The TUI key bindings [command=key,command=key,..]
--print-tui-binding-commands
Print all TUI commands that can be bound and exit
-C, --report-cycles <REPORT_CYCLES>
The number of report cycles to run [default: 10]
-G, --geoip-mmdb-file <GEOIP_MMDB_FILE>
The supported MaxMind or IPinfo GeoIp mmdb file
--generate <GENERATE>
Generate shell completion
[possible values: bash, elvish, fish, powershell, zsh]
--generate-man
Generate ROFF man page
--print-config-template
Print a template toml config file and exit
--log-format <LOG_FORMAT>
The debug log format [default: pretty]
Possible values:
- compact: Display log data in a compact format
- pretty: Display log data in a pretty format
- json: Display log data in a json format
- chrome: Display log data in Chrome trace format
--log-filter <LOG_FILTER>
The debug log filter [default: trippy=debug]
--log-span-events <LOG_SPAN_EVENTS>
The debug log format [default: off]
Possible values:
- off: Do not display event spans
- active: Display enter and exit event spans
- full: Display all event spans
-v, --verbose
Enable verbose debug logging
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
主题参考
以下表格列出了默认的Tui颜色主题。这些可以通过命令行选项--tui-theme-colors
或配置文件中theme-colors
部分来覆盖。
项目 | 描述 | 默认值 |
---|---|---|
bg-color |
默认背景颜色 | 黑色 |
border-color |
默认边框颜色 | 灰色 |
text-color |
默认文本颜色 | 灰色 |
tab-text-color |
跟踪标签中的文本颜色 | 绿色 |
hops-table-header-bg-color |
跳转表头的背景颜色 | 白色 |
hops-table-header-text-color |
跳转表头中的文本颜色 | 黑色 |
hops-table-row-active-text-color |
跳转表头中活动行的文本颜色 | 灰色 |
hops-table-row-inactive-text-color |
跳转表头中非活动行的文本颜色 | 深灰色 |
hops-chart-selected-color |
跳转图表中选中序列的颜色 | 绿色 |
hops-chart-unselected-color |
跳转图表中未选中序列的颜色 | 灰色 |
hops-chart-axis-color |
跳转图表中轴的颜色 | 深灰色 |
frequency-chart-bar-color |
频率图表中条形的颜色 | 绿色 |
frequency-chart-text-color |
频率图表中条形文本的颜色 | 灰色 |
flows-chart-bar-selected-color |
流量图表中选中流量条的颜色 | 绿色 |
flows-chart-bar-unselected-color |
流量图表中未选中流量条的颜色 | 深灰色 |
flows-chart-text-current-color |
流量图表中当前流量文本的颜色 | 浅绿色 |
flows-chart-text-non-current-color |
流量图表中非当前流量文本的颜色 | 白色 |
samples-chart-color |
样本图表的颜色 | 黄色 |
help-dialog-bg-color |
帮助对话框的背景颜色 | 蓝色 |
help-dialog-text-color |
帮助对话框中的文本颜色 | 灰色 |
settings-dialog-bg-color |
设置对话框的背景颜色 | 蓝色 |
settings-tab-text-color |
设置对话框标签中的文本颜色 | 绿色 |
settings-table-header-text-color |
设置表头中的文本颜色 | 黑色 |
settings-table-header-bg-color |
设置表头背景颜色 | 白色 |
settings-table-row-text-color |
设置表中行的文本颜色 | 灰色 |
map-world-color |
世界地图的颜色 | 白色 |
map-radius-color |
地图精度半径圆的颜色 | 黄色 |
map-selected-color |
地图选中项框的颜色 | 绿色 |
map-info-panel-border-color |
地图信息面板边框的颜色 | 灰色 |
map-info-panel-bg-color |
地图信息面板的背景颜色 | 黑色 |
map-info-panel-text-color |
地图信息面板中文本的颜色 | 灰色 |
支持的 ANSI 颜色 包括
黑色
,红色
,绿色
,黄色
,蓝色
,品红色
,青色
,灰色
,深灰色
,浅红色
,浅绿色
,浅黄色
,浅蓝色
,浅品红色
,浅青色
,白色
此外,还可以使用 CSS 命名颜色(例如 SkyBlue)和原始十六进制值(例如 ffffff),但请注意,这些只能在某些平台和终端上得到支持,并在其他地方可能无法正确渲染。
颜色名称不区分大小写,可以包含连字符。
键绑定参考
以下表格列出了默认的 Tui 命令键绑定。这些可以通过 --tui-key-bindings
命令行选项或在配置文件的 bindings
部分中重写。
命令 | 描述 | 默认值 |
---|---|---|
toggle-help |
切换帮助 | h |
toggle-help-alt |
切换帮助(备用绑定) | ? |
toggle-settings |
切换设置 | s |
toggle-settings-tui |
打开设置(Tui 选项卡) | 1 |
toggle-settings-trace |
打开设置(Trace 选项卡) | 2 |
toggle-settings-dns |
打开设置(Dns 选项卡) | 3 |
toggle-settings-geoip |
打开设置(GeoIp 选项卡) | 4 |
toggle-settings-bindings |
打开设置(Bindings 选项卡) | 5 |
toggle-settings-theme |
打开设置(Theme 选项卡) | 6 |
toggle-settings-columns |
打开设置(Columns 选项卡) | 7 |
next-hop |
选择下一个跳点 | down |
previous-hop |
选择上一个跳点 | up |
next-trace |
选择下一个跟踪 | right |
previous-trace |
选择上一个跟踪 | left |
next-hop-address |
选择下一个跳点地址 | . |
previous-hop-address |
选择上一个跳点地址 | , |
address-mode-ip |
仅显示 IP 地址 | i |
address-mode-host |
仅显示主机名 | n |
address-mode-both |
显示 IP 地址和主机名 | b |
toggle-freeze |
切换冻结显示 | ctrl+f |
toggle-chart |
切换图表 | c |
toggle-map |
切换 GeoIp 地图 | m |
toggle-flows |
切换流量 | f |
toggle-privacy |
切换跳点隐私 | p |
expand-hosts |
展开每个跳点显示的主机 | ] |
expand-hosts-max |
将每个跳点显示的主机展开到最大 | } |
contract-hosts |
收缩每个跳点显示的主机 | [ |
contract-hosts-min |
将每个跳点显示的主机收缩到最小 | { |
chart-zoom-in |
图表放大 | = |
chart-zoom-out |
图表缩小 | - |
clear-trace-data |
清除所有跟踪数据 | ctrl+r |
clear-dns-cache |
刷新 DNS 缓存 | ctrl+k |
clear-selection |
清除当前选择 | esc |
toggle-as-info |
切换 AS 信息显示 | z |
toggle-hop-details |
切换跳点详情 | d |
quit |
退出应用程序 | q |
支持的修饰符包括: shift
, ctrl
, alt
, super
, hyper
和 meta
。可以指定多个修饰符,例如 ctrl+shift+b
。
列参考
以下表格列出了在Tui中可显示的列。这些列可以通过命令行选项--tui-custom-columns
或配置文件中tui
部分的tui-custom-columns
属性进行覆盖。
列 | 代码 | 描述 |
---|---|---|
# |
h |
跳数的生存时间(TTL) |
主机 |
o |
跳数对应的主机名称和IP地址 可能包括AS信息、GeoIp和ICMP扩展 在跳数详细导航模式下显示完整的跳数详细信息 |
损失% |
l |
跳数的丢包百分比 |
Snd |
s |
发送的探测数量 |
Recv |
r |
收到的探测响应数量 |
Last |
a |
最后一个探测的往返时间(RTT) |
Avg |
v |
所有探测的平均RTT |
Best |
b |
所有探测中的最佳RTT |
Wrst |
w |
所有探测中的最差RTT |
StDev |
d |
所有探测的标准偏差 |
Sts |
t |
跳数的状态 - 🟢 健康的跳数 - 🔵 非目标跳数有丢包(不一定表示有问题) - 🟤 非目标跳数无响应(不一定表示有问题) - 🟡 目标跳数有丢包(可能表示有问题) - 🔴 目标跳数无响应(可能表示有问题) |
Jttr |
j |
连续轮次的往返时间(RTT)差异 |
Javg |
g |
所有探测的平均抖动 |
Jmax |
x |
所有探测中的最大抖动 |
Jint |
i |
所有探测的平滑抖动值 |
Seq |
Q |
最后一个探测的序列号 |
Sprt |
S |
最后一个探测的源端口 |
Dprt |
P |
最后一个探测的目标端口 |
Type |
T |
最后一个探测的ICMP数据包类型 - TE: 时间超时 - ER: 回显应答 - DU: 目的地不可达 - NA: 不适用 |
代码 |
C |
最后一个探测的ICMP数据包代码 |
Nat |
N |
跳数的NAT检测状态 |
Fail |
f |
无法发送的探测数量 |
默认列是 holsravbwdt
。
[!注意] 列将按照配置中指定的顺序显示。
配置参考
Trippy可以通过命令行参数或可选的配置文件进行配置。如果配置文件和命令行参数都指定了给定的配置项,则后者将具有优先权。
可以通过-c
(--config-file
)参数提供Trippy的配置文件位置。如果没有提供,Trippy将尝试在以下位置查找trippy.toml
或.trippy.toml
配置文件:
- 当前目录
- 用户主目录
- Unix的XDG配置目录(仅限Unix):
$XDG_CONFIG_HOME
或~/.config
- Windows数据目录(仅限Windows):
%APPDATA%
为 0.9.0、0.10.0 和 0.11.0 版本,提供了一个注释模板配置文件。
Trippy(版本 0.9.0
或更高版本)可以生成模板配置文件
trip --print-config-template > trippy.toml
常见问题解答
为什么 Trippy 会显示 "等待数据..."?
[!IMPORTANT]
如果您使用的是 Windows,您必须 必须 配置 Windows Defender 防火墙以允许传入的 ICMP 流量
当 Trippy 显示“等待数据...”时,意味着它对跟踪发送的探测没有收到任何响应。这表明要么探测没有被发送,要么,更常见的是,没有收到响应。
请确认本地和网络防火墙允许 ICMP 流量,并且系统 traceroute
(或 Windows 上的 tracert.exe
)按预期工作。请注意,即使在 Windows 上 tracert.exe
按预期工作,您也必须 必须 配置 Windows Defender 防火墙以允许传入的 ICMP 流量。
为了进行更深入的诊断,您可以运行诸如 https://www.wireshark.org 和 https://www.tcpdump.org 之类的工具,以验证是否发送和接收了 ICMP 请求和响应。
如何在 Windows Defender 防火墙中允许传入的 ICMP 流量?
可以使用 PowerShell 创建 Windows Defender 防火墙规则。
New-NetFirewallRule -DisplayName "ICMPv4 Trippy Allow" -Name ICMPv4_TRIPPY_ALLOW -Protocol ICMPv4 -Action Allow
New-NetFirewallRule -DisplayName "ICMPv6 Trippy Allow" -Name ICMPv6_TRIPPY_ALLOW -Protocol ICMPv6 -Action Allow
可以通过以下方式启用规则
Enable-NetFirewallRule ICMPv4_TRIPPY_ALLOW
Enable-NetFirewallRule ICMPv6_TRIPPY_ALLOW
可以通过以下方式禁用规则
Disable-NetFirewallRule ICMPv4_TRIPPY_ALLOW
Disable-NetFirewallRule ICMPv6_TRIPPY_ALLOW
Windows Defender 防火墙规则也可以手动配置,有关逐步指南,请参阅 此处。
Trippy 的推荐设置是什么?
没有为 Trippy 特定的推荐设置,它提供了各种可配置的功能,可用于执行不同类型的分析。设置的选项将取决于您希望执行的分析以及您工作的环境。
以下列出了某些常见选项以及一些基本指导,说明它们何时可能适用。
[!NOTE] Windows 的
tracert
工具默认使用 ICMP,而大多数 Unixtraceroute
工具默认使用 UDP。
ICMP
默认情况下,Trippy 将运行针对目标的 ICMP 跟踪。这将通常为每次跟踪轮次生成到目标的固定路径(单个流),这使得阅读和分析变得容易。这对于一般网络故障排除非常有用。
然而,许多路由器被配置为限制 ICMP 流量,这可能会使得难以获得准确的丢包情况。此外,ICMP 流量通常不受到 ECMP 路由的影响,因此可能不会反映其他协议(如 UDP 和 TCP)的路径。
要运行简单的 ICMP 跟踪
trip example.com
由于 ICMP 流量的速率限制,有些人更喜欢在 Tui 中隐藏 Loss%
和 Recv
列,因为这些列很容易被误解。
trip example.com --tui-custom-columns hosavbwdt
可以通过将这些设置添加到 Trippy 配置文件中使其成为永久设置
[tui]
custom-columns = "hosavbwdt"
[!NOTE]
Sts
列使用不同的颜色代码来反映中间节点与目标节点之间的丢包,有关更多信息,请参阅 列参考。
UDP/Dublin 与固定端口
UDP 跟踪提供了对受 ECMP 路由影响的流量路径的更真实视图。
在33434-33534范围内设置固定的目标端口,可能使Trippy确定探头已到达目标,因为许多路由器和防火墙配置允许该范围内的UDP探头,并会响应目标不可达。
然而,运行具有固定目标端口和可变源端口的UDP跟踪通常会导致每个跟踪轮次中的每个探头遵循不同的路径。这使得输出难以解释,因为不同的主机会在轮次之间对给定的跳数(生存时间)进行响应。
通过使用dublin
ECMP策略,该策略将序列号编码在IP identifier
字段中,Trippy可以固定源端口和目标端口,通常在每个跟踪轮次中的每个探头都会导致单个路径。
[!NOTE] 对于IPv6,UDP/Dublin将序列号编码为有效载荷长度,因为在IPv6中IP
identifier
字段不可用。
[!NOTE] 请记住,每个探头都是一个独立的试验,每个都可能穿越一条完全不同的路径。在实际中,ICMP探头通常遵循单一路径,而UDP和TCP探头的路径通常由协议、源和目标IP地址及端口的五元组确定。
还请注意,返回路径可能与前进路径不同,并且可能对每个探头也不同。例如
dublin
和paris
的策略有助于控制前向探头的路径,但不能帮助控制返回路径。因此,建议双向运行跟踪以获得完整的情况。
要使用dublin
ECMP策略运行具有固定源和目标端口的UDP跟踪
trip example.com --udp --multipath-strategy dublin --source-port 5000 --target-port 33434
[!NOTE] 源端口可以是任何有效的端口号,但目标端口通常应在33434-33534范围内或目标主机上对UDP探头开放的任何范围。
可以通过将这些设置添加到 Trippy 配置文件中使其成为永久设置
[strategy]
protocol = "udp"
multipath-strategy = "dublin"
source-port = 5000
target-port = 33434
具有固定目标端口和可变源端口的UDP/Dublin
作为上述内容的扩展,如果您在使用dublin
ECMP策略时不固定源端口,Trippy将在每个跟踪轮次(即给定轮次中的每个探头)中改变源端口(即每个轮次中的探头将共享相同的源端口,源端口将在每个轮次中变化)。这通常会导致给定轮次中的每个探头的路径相同,但每个轮次遵循不同的路径。
可以在Trippy Tui中按toggle-flows
键绑定(默认为f
键)探索这些单独的流。
将Seq
、Sprt
和Dprt
列添加到Tui将分别显示序列号、源端口和目标端口,这使得可视化更加容易。
trip example.com --udp --multipath-strategy dublin --target-port 33434 --tui-custom-columns holsravbwdtSPQ
可以通过将这些设置添加到 Trippy 配置文件中使其成为永久设置
[strategy]
protocol = "udp"
multipath-strategy = "dublin"
target-port = 33434
[tui]
custom-columns = "holsravbwdtSPQ"
为了使流更容易可视化,您可以生成所有跟踪流的Graphviz DOT文件报告。
trip example.com --udp --multipath-strategy dublin --target-port 33434 -m dot -C 5
UDP/Paris
使用paris
ECMP策略的UDP提供了与固定端口相同的dublin
策略的好处,并且可以以相同的方式使用。
它们在编码探头中的序列号的方式上有所不同。dublin
策略使用IP identifier
字段,而paris
策略使用UDP checksum
字段。
要使用paris
ECMP策略运行具有固定源和目标端口的UDP跟踪
trip example.com --udp --multipath-strategy paris --source-port 5000 --target-port 33434
paris
策略在NAT后面无法工作,因为UDP checksum
字段通常会被NAT设备修改。因此,当存在NAT时,建议使用dublin
策略。
[!注意] 在使用
dublin
策略时,Trippy 可以在某些情况下检测到 NAT 设备的存在,并且在 Tui 中的Nat
列表中可以显示,以指示何时检测到 NAT。有关更多信息,请参阅 列参考。
TCP
TCP 跟踪与 UDP 跟踪类似,因为它提供了对受 ECMP 路由影响的流量路径的更真实视图。
TCP 跟踪默认使用目标端口 80,并将源端口设置为序列号,这通常会导致每个跟踪轮次中的每个探测遵循不同的路径。
要运行 TCP 跟踪
trip example.com --tcp
TCP 跟踪用于诊断 TCP 连接和高层协议(如 HTTP)的问题。通常可以使用 UDP 跟踪来诊断 IP 层网络问题,因为它提供了控制探测路径的方法,因此通常更受欢迎。
[!注意] Trippy 不支持 TCP 跟踪的
dublin
或paris
ECMP 策略,因此您无法同时修复源端口和目标端口。有关详细信息,请参阅 跟踪问题。
致谢
Trippy 由 ratatui(以前称为 tui-rs)、crossterm 以及 几个 基础 Rust 库提供支持。
Trippy 从 mtr 中吸取了大量灵感,并吸收了来自 libparistraceroute 和 Dublin Traceroute 的想法。
Trippy 的网络代码受到了 pnet 的启发,并且将该代码库的一些元素纳入了 Trippy。
从由 Team Cymru 提供的 IP 到 ASN 映射服务 中检索 AS 数据。
trippy.cli.rs 的 CNAME 托管由 cli.rs 提供。
Trippy 聊天室由 Zulip 赞助。
许可
本项目根据 Apache 许可证(版本 2.0)分发。
除非您明确表示,否则您提交的任何有意包含在 Apache-2.0 许可证定义的时间内的贡献,均应按上述方式许可,不附加任何额外条款或条件。
有关详细信息,请参阅 LICENSE。
版权所有 2022 Trippy 贡献者
依赖项
30–42MB
~739K SLoC