RustNet - 一个查看当前服务进程流量的神器

行云流水
2026-05-17 / 0 评论 / 2 阅读 / 正在检测是否收录...
你是否遇到过这样的困惑:服务器突然带宽飙升,却不知道是哪个进程在作怪?想看实时网络连接,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-monitor

Linux 免 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 填补了一个长期存在的空白:在不需要复杂抓包分析的情况下,快速看清每条网络连接的进程归属。

它的价值在于:

  1. 快速定位问题:带宽异常、可疑连接,几秒钟就能找到源头
  2. SSH 友好:远程服务器运维的利器
  3. 安全设计:沙箱隔离,最小化特权
  4. 跨平台:Linux、macOS、Windows、FreeBSD 全覆盖

如果你经常需要排查网络问题,RustNet 绝对值得一试。项目开源在
GitHub:https://github.com/domcyrus/rustnet

评论 (0)

取消
只有登录/注册用户才可评论