你是否遇到过这样的困惑:服务器突然带宽飙升,却不知道是哪个进程在作怪?想看实时网络连接,netstat输出一堆 IP 地址让人眼花缭乱,ss命令只能看到端口信息,用 Wireshark 抓包又太重了,还得在服务器上转发 X11 才能看到界面?
今天给大家介绍一个填补了这个空白的神器 —— RustNet。

它解决了什么问题?
传统的网络监控工具各有短板:
- netstat / ss:能看到连接,但不知道是哪个进程发起的,而且无法实时监控状态变化
- Wireshark / tcpdump:能抓包分析,但看不到进程归属,因为是工作在数据包层面而非 socket 层面
- iftop:能看带宽,但同样不知道进程信息
RustNet 的定位很明确:每一条 TCP、UDP、QUIC 连接都能追溯到所属进程。让你一眼就能看清:谁在使用网络、走的是什么协议、消耗了多少带宽。
核心能力一览
1. 进程级归属识别
这是 RustNet 最核心的能力。在不同平台上采用了不同的技术方案:
- Linux:使用 eBPF 技术,性能极高,开销极低
- macOS:使用 PKTAP
- Windows / FreeBSD:使用原生 API
你再也不用去 lsof -i 或者 netstat -tunlp 按进程名搜索了,RustNet 直接把进程信息展示在每条连接旁边。
2. 深度包检测(DPI)
不需要额外解析器,就能自动识别:
- HTTP / HTTPS(带 SNI)
- DNS、SSH、FTP
- QUIC、MQTT、BitTorrent
- STUN、NTP、mDNS、DHCP、SNMP 等
这意味着你不仅能看到连接,还能知道这条连接是用来干嘛的。
3. 安全沙箱机制
这是个很贴心的设计。抓包工具通常需要 root 权限,这带来安全风险。RustNet 采用的策略是:
- Linux 5.13+:使用 Landlock 沙箱
- macOS:使用 Seatbelt
- Windows:token 降权 + job-object
在 libpcap 初始化完成后立即丢弃特权,大大降低了风险。
4. TCP 网络分析
实时统计重传、乱序包、快重传,帮你发现网络质量问题。既有每条连接的细节,也有全局汇总视图。
5. 智能连接生命周期
按协议设置不同的超时时间:
- HTTP/HTTPS:10 分钟
- SSH:30 分钟(适配长会话)
- DNS:30 秒
- QUIC 已连接:3 分钟
颜色指示过期程度:白色(活跃)→ 黄色(开始过期)→ 红色(即将过期)。
按 t 可以保留已关闭的历史连接,方便事后追溯。
6. 强大的过滤能力
支持 Vim / fzf 风格的过滤语法:
/port:443 # 按端口过滤
/process:firefox # 按进程过滤
/sni:google.com # 按 SNI 过滤
/state:established # 按状态过滤
/dport:443 sni:github.com # 组合过滤还支持正则表达式:/(?i)pattern/
7. GeoIP 增强
基于本地 MaxMind GeoLite2 数据库查询国家信息,不发起任何网络请求,完全本地化。
实战场景举例
场景一:排查带宽异常
服务器突然带宽飙升,SSH 进去后直接运行:
sudo rustnet然后按 s 多次,切换到按带宽排序,立刻就能看到哪个进程在疯狂发包。
场景二:监控可疑连接
怀疑有恶意进程对外连接?过滤一下:
/process:suspect_name或者看所有非 HTTPS 的对外连接:
/proto:tcp !port:443场景三:SSH 远程运维
在远程服务器上直接运行 RustNet,TUI 界面完美适配 SSH,不需要转发 X11,也不需要把抓包文件传回本地分析。
场景四:QUIC 协议分析
QUIC 是 HTTP/3 的底层协议,传统工具很难分析。RustNet 可以直接识别 QUIC 连接并显示状态:
/proto:quic安装与使用
安装
各平台都有原生包:
# macOS / Linux (Homebrew)
brew tap domcyrus/rustnet
brew install rustnet
# Ubuntu 25.10+
sudo add-apt-repository ppa:domcyrus/rustnet
sudo apt update && sudo apt install rustnet
# Arch Linux
sudo pacman -S rustnet
# Fedora 42+
sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet
# Windows (需要先安装 Npcap)
choco install rustnet也可以通过 crates.io 安装:
cargo install rustnet-monitorLinux 免 sudo 运行
推荐做法是赋予 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 # 设置刷新间隔(毫秒)快捷键速览
| 按键 | 功能 |
|---|---|
Tab | 切换标签页 |
i | 切换接口统计 |
↑/k ↓/j | 上下移动 |
Enter | 查看连接详情 |
/ | 进入过滤模式 |
s S | 切换排序列 / 排序方向 |
t | 显示/隐藏历史连接 |
c | 复制远端地址 |
q | 退出 |
与 Wireshark 的协作
RustNet 和 Wireshark 不是替代关系,而是互补:
- 用 RustNet 快速定位哪个进程在发起连接
- 用
--pcap-export导出带进程信息的数据包 - 用脚本
scripts/pcap_enrich.py富化数据 - 在 Wireshark 中结合 PID 和进程上下文深度分析
技术栈
RustNet 基于 Rust 构建,核心依赖:
- ratatui:终端 UI
- libpcap:抓包
- eBPF (libbpf-rs):Linux 进程识别
- Landlock:Linux 沙箱
- MaxMind GeoLite2:GeoIP 数据库
总结
RustNet 填补了一个长期存在的空白:在不需要复杂抓包分析的情况下,快速看清每条网络连接的进程归属。
它的价值在于:
- 快速定位问题:带宽异常、可疑连接,几秒钟就能找到源头
- SSH 友好:远程服务器运维的利器
- 安全设计:沙箱隔离,最小化特权
- 跨平台:Linux、macOS、Windows、FreeBSD 全覆盖
如果你经常需要排查网络问题,RustNet 绝对值得一试。项目开源在
GitHub:https://github.com/domcyrus/rustnet
评论 (0)