谁在偷偷联网?用 RustNet 抓出来
一个终端里的全平台网络监控工具:按进程看 TCP、UDP、QUIC 连接,识别协议、SNI、端口和流量,适合排查陌生联网进程。


电脑或服务器上,总会有一些连接让人心里没底:浏览器开着几十个标签页,Electron 应用常驻后台,开发环境里还有各种代理、同步、自动更新和容器进程。只看 netstat、ss 或任务管理器,很容易卡在同一个问题上:这个连接到底是谁发出去的?
RustNet 解决的就是这件小但很烦的事。它把终端变成一个实时网络看板,按进程列出 TCP 、 UDP 、 QUIC 连接,同时显示协议、地址、端口、 SNI 、带宽、连接状态和接口统计。看到一个陌生连接,不用先抓包再猜,先看它归哪个进程。

它适合什么场景
第一类是个人电脑排查。比如某个软件退出后仍在联网,浏览器插件访问了奇怪域名,或者系统空闲时网卡仍有流量。 RustNet 可以按 process:、dst:、sni:、port: 过滤,把可疑连接缩到很小的范围。
第二类是服务器排障。 SSH 上去后直接跑 TUI,不需要 X11,不用把 pcap 文件传来传去。谁在连外部 API 、哪个进程占带宽、哪个服务有大量重传,都能先在终端里看一眼。
第三类是开发调试。调接口、跑爬虫、起本地代理、测 QUIC 或 DNS 时,RustNet 比传统连接列表更直观。它不是 Wireshark 的替代品,更像是抓包前的第一层筛子:先定位进程,再决定要不要深入分析。

全平台,但实现不一样
RustNet 支持 Linux 、 macOS 、 Windows 和 FreeBSD 。不同系统用的底层能力不同:Linux 默认走 eBPF,macOS 使用 PKTAP,Windows 和 FreeBSD 调用系统原生接口。
这点很实用。很多网络监控工具只在 Linux 上好用,换到 Mac 或 Windows 就变成半残。 RustNet 的定位是同一个终端界面,在多平台上尽量给出一致的连接视图。
安全上也做了处理。它需要抓包权限,但初始化完成后会降权运行;Linux 5.13+ 使用 Landlock,macOS 使用 Seatbelt,Windows 侧会做 token 降权和 job-object 限制。对普通用户来说,可以理解成:该要权限的时候要权限,拿到必要能力后尽量把运行范围收住。
安装和启动
macOS 或 Linux 上,如果装了 Homebrew:
brew install rustnet
sudo rustnet
Ubuntu 25.10+ 可以走 PPA:
sudo add-apt-repository ppa:domcyrus/rustnet
sudo apt update && sudo apt install rustnet
sudo rustnet
Fedora:
sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet
sudo rustnet
Arch Linux:
sudo pacman -S rustnet
sudo rustnet
Rust 用户也可以直接从 crates.io 安装:
cargo install rustnet-monitor
sudo rustnet
Windows 侧可以用 Chocolatey,注意先安装 Npcap,并启用 WinPcap API-compatible Mode:
choco install rustnet
Linux 上如果不想每次都 sudo,可以给可执行文件加 capability:
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(which rustnet)
rustnet
如果界面仍提示 eBPF 不可用,多半是内核、权限或发行版策略问题。先用 sudo rustnet 验证,再去调整 capability,比一上来改系统配置更稳。
怎么抓出陌生联网进程
启动后先看 Overview 。这里会按连接列出进程、地址、协议、状态和实时速率。发现可疑目标后,按 / 进入过滤。
常用过滤方式:
/process:chrome 按进程名过滤
/port:443 看 443 端口连接
/dst:github.com 看目标地址
/sni:api 看 TLS SNI 里带 api 的连接
/state:established 只看已建立连接
/proto:tcp 只看 TCP
组合过滤也能用:
/dport:443 sni:google.com
/process:firefox state:quic_connected
/dport:22 app:openssh state:established
想找带宽大户,按 s 切换排序列,直到按总带宽排序。想保留已经关闭的连接,按 t 打开历史连接视图。排查短连接、自动更新和后台同步时,这个开关很有用。

它比常见工具顺手在哪里
ss 和 netstat 能看连接,但实时状态和协议识别不够直观;Wireshark 很强,但它看到的是包,不知道哪个进程拥有这个 socket;tcpdump 适合取证,不适合快速扫一眼机器上谁在联网。
RustNet 的位置夹在中间。它不追求替代所有抓包工具,而是把进程、连接、协议和流量放在同一张终端表里。日常排障时,先用它缩小范围,再决定是否导出 pcap 或打开 Wireshark,会省很多来回猜的时间。
它也支持接口统计。按 3 可以看网卡的 RX/TX 、错误、丢包等指标。服务器上怀疑网络抖动、本机网卡异常、容器流量太高时,这个页面比只看应用列表更完整。

使用时注意两点
第一,Linux 上默认的 eBPF 进程识别有一个现实限制:内核 comm 字段最长 16 个字符,多线程应用可能显示线程名,而不是完整可执行路径。 Chrome 、 Firefox 、 Electron 应用尤其常见。遇到看起来奇怪的进程名,先结合 PID 、目标地址、 SNI 和过滤结果判断,不要只看名字。
第二,抓包权限本身就敏感。个人机器上临时排查问题,sudo rustnet 没什么负担;长期在服务器上使用,建议认真看权限配置和安全文档,再决定是否给二进制文件长期 capability 。
RustNet 的价值不在花哨,而在把一个常见问题变简单:机器正在和谁说话,是哪个进程在说,走的是什么协议。对需要管理多台电脑、远程服务器、开发环境和代理工具的人来说,这个小工具值得放进常用命令列表。