
rustnet v1.5.0
针对终端进行按进程的网络监控,具备深度包检测功能。跨平台,沙箱化。
RustNet
面向终端的进程级网络监控工具:实时呈现 TCP、UDP、QUIC 连接,自带深度包检测,默认沙箱隔离运行。
English | 简体中文
实时洞察机器对外发起的每一条连接:谁在使用它、走的是什么协议。无需 tcpdump,无需 X11 转发,也不必把 root 权限传递下去。
功能特性
- 进程级归属识别:每一条 TCP、UDP、QUIC 连接都能追溯到所属进程。Linux 使用 eBPF,macOS 使用 PKTAP,Windows 与 FreeBSD 则走原生 API。Wireshark 与 tcpdump 做不到这一点;
netstat/ss也无法展示实时状态。 - 深度包检测:无需外部解析器即可识别 HTTP、带 SNI 的 HTTPS/TLS、DNS、SSH、FTP、QUIC、MQTT、BitTorrent、STUN、NTP、mDNS、LLMNR、DHCP、SNMP、SSDP 及 NetBIOS。
- 安全沙箱:Linux 5.13+ 使用 Landlock,macOS 使用 Seatbelt,Windows 通过 token 降权 + job-object 阻止子进程创建。libpcap 初始化完成后立即丢弃特权。详见 SECURITY.zh-CN.md。
- TCP 网络分析:实时统计重传、乱序包、快重传,既有逐连接视图也有汇总视图。
- 智能连接生命周期:按协议设置超时,以白 → 黄 → 红的颜色指示过期程度。按
t可保留历史(已关闭)连接以便事后追溯。 - Vim / fzf 风格过滤:支持
port:、src:、dst:、sni:、process:、state:、proto:,以及/(?i)pattern/形式的正则。 - GeoIP 增强:基于本地 MaxMind GeoLite2 数据库查询国家信息,不发起任何网络请求。
- 跨平台:Linux、macOS、Windows、FreeBSD。
为什么选 RustNet?
RustNet 填补了简单连接工具(netstat、ss)与数据包分析器(Wireshark、tcpdump)之间的空白:
- 进程归属:看清每条连接归哪个应用所有。Wireshark 看不到这一层,因为它只看包,不看 socket。
- 以连接为中心的视图:逐连接实时追踪状态、带宽与协议。
- SSH 友好:TUI 可直接在 SSH 会话中运行,远端服务器上发生了什么一眼可见,不必转发 X11 或抓包再回传。
RustNet 与抓包工具是互补关系。用 RustNet 看清谁在发起连接;若要直接在 Wireshark 中查看,可用 --pcapng-export 写出带 RustNet 数据包注释的 PCAPNG;若更重视清理阶段的元数据完整性,可用 --pcap-export 加 JSONL sidecar,再借 scripts/pcap_enrich.py 富化。参见 USAGE.zh-CN.md 的 PCAP 导出章节 与 ARCHITECTURE.zh-CN.md 的同类工具对比章节。
基于 ratatui、libpcap、eBPF(libbpf-rs)、DashMap、crossbeam、ring、MaxMind GeoLite2 与 Landlock 构建。完整依赖清单见 ARCHITECTURE.zh-CN.md。
基于 eBPF 的增强型进程识别(Linux 默认)
RustNet 在 Linux 上默认使用内核 eBPF 程序进行进程识别,从而获得更高的性能与更低的开销。但这种方式也有一些重要的限制需要了解:
进程名长度限制:
- eBPF 使用内核的
comm字段,该字段最多只有 16 个字符 - 显示的是任务 / 线程的命令名,而非完整的可执行路径
- 多线程应用往往展示线程名而非主进程名
真实场景示例:
- Firefox:可能显示为 "Socket Thread"、"Web Content"、"Isolated Web Co" 或 "MainThread"
- Chrome:可能显示为 "ThreadPoolForeg"、"Chrome_IOThread"、"BrokerProcess" 或 "SandboxHelper"
- Electron 应用:经常显示为 "electron"、"node" 或内部线程名
- 系统进程:展示截断后的名字,如 "systemd-resolve" → "systemd-resolve"
回退行为:
- 当 eBPF 加载失败或权限不足时,RustNet 会自动回退到基于 procfs 的标准进程识别方式
- 标准模式可以拿到完整进程名,但 CPU 开销更高
- eBPF 默认启用,无需任何特殊编译参数
如需关闭 eBPF、仅使用 procfs 模式,请这样构建:
cargo build --release --no-default-features
技术细节见 ARCHITECTURE.zh-CN.md。
网络接口统计监控
RustNet 在所有支持的平台上提供实时的网络接口统计:
- 概览标签页:展示当前活跃的接口,包含速率、错误数与丢包数
- 接口标签页(按
3):以详细表格呈现各接口的完整指标 - 跨平台:Linux(sysfs)、macOS / FreeBSD(getifaddrs)、Windows(GetIfTable2 API)
- 智能过滤:Windows 上自动剔除虚拟 / 过滤类适配器
如何解读接口统计以及各平台的差异,详见 USAGE.zh-CN.md。
可用指标:
- 总字节数与包数(RX / TX)
- 错误计数(收 / 发)
- 丢包数(队列溢出)
- 冲突数(传统指标,现代网络中很少出现)
数据由后台线程每 2 秒采集一次,对性能影响极小。
截图
| 概览 连接列表与实时统计、迷你折线图 ![]() |
详情 逐连接展示 SNI、加密套件、GeoIP、DPI ![]() |
| 图表 流量曲线、应用分布、Top 进程 ![]() |
接口 各接口 RX / TX 历史曲线、错误与丢包 ![]() |
快速上手
安装
Homebrew(macOS / Linux):
brew install rustnet
Ubuntu(25.10+):
sudo add-apt-repository ppa:domcyrus/rustnet
sudo apt update && sudo apt install rustnet
Fedora(42+):
sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet
openSUSE Tumbleweed:
sudo zypper addrepo https://download.opensuse.org/repositories/home:/domcyrus:/rustnet/openSUSE_Tumbleweed/home:domcyrus:rustnet.repo
sudo zypper refresh
sudo zypper install rustnet
Arch Linux:
sudo pacman -S rustnet
Nix / NixOS:
nix-shell -p rustnet
# 然后在 shell 中执行: sudo rustnet
通过 crates.io:
cargo install rustnet-monitor
Windows(Chocolatey):
# 需在管理员权限的 PowerShell 中执行
# 需要先安装 Npcap(https://npcap.com),并启用 "WinPcap API-compatible Mode"
choco install rustnet
其他平台:
- FreeBSD:从 rustnet-bsd releases 下载
- Docker、源码构建、其他 Linux 发行版:详见 INSTALL.zh-CN.md
运行 RustNet
抓包需要更高的权限:
# 快速启动(所有平台)
sudo rustnet
# Linux:为可执行文件赋予 Linux capabilities,即可免 sudo 运行(推荐)
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(which rustnet)
rustnet
常用参数:
rustnet -i eth0 # 指定网络接口
rustnet --show-localhost # 显示 localhost 上的连接
rustnet --no-resolve-dns # 关闭反向 DNS 解析(默认开启)
rustnet -r 500 # 设置刷新间隔(毫秒)
rustnet --theme classic # 原始全彩调色板(默认:muted)
rustnet --pcapng-export capture.pcapng # 导出带注释的 PCAPNG
权限配置详情见 INSTALL.zh-CN.md,完整参数说明见 USAGE.zh-CN.md。
如果已经设置了 Linux capabilities,但 TUI 仍然提示
eBPF unavailable,请参阅 INSTALL.zh-CN.md 的排障章节。



