RustNet:终端上的进程级网络监控与深度包检测利器

RustNet 封面

日常开发和运维中,我们经常需要查看系统当前的网络连接情况。虽然 netstatss 是常用的老牌工具,但它们无法提供实时的连接状态;而 tcpdumpWireshark 虽然强大,但缺乏直接的进程归属(Process Attribution)信息。

今天给大家介绍一款由 Rust 编写的现代终端网络监控工具:**RustNet**。

什么是 RustNet?

RustNet 是一款专为终端设计的进程级网络监控工具。它能够实时监控 TCP、UDP 和 QUIC 连接,并内置了深度包检测(Deep Packet Inspection, DPI)功能,默认开启安全沙箱模式。

它完美填补了简单连接查看工具(如 netstatss)和专业抓包分析工具(如 Wiresharktcpdump)之间的空白。

核心特性

  1. 精确的进程归属(Per-process attribution)
    RustNet 能够将每一个 TCP、UDP 和 QUIC 连接精确映射到所属的进程。在 Linux 上它利用 eBPF 技术,在 macOS 上利用 PKTAP,在 Windows 和 FreeBSD 上利用原生 API 来实现。这是 Wireshark 等纯粹看包的工具无法做到的。

  2. 内置深度包检测(DPI)
    不需要外部插件,RustNet 可以直接识别 HTTP、带有 SNI 的 HTTPS/TLS、DNS、SSH、QUIC、NTP、mDNS、DHCP 等众多网络协议。

  3. 极致的安全沙箱
    网络监控工具通常需要高权限,RustNet 将安全性放在首位。它使用了 Landlock (Linux 5.13+)、Seatbelt (macOS) 和令牌权限下降等机制,在 libpcap 初始化后立即降权,最大限度保证系统安全。

  4. 实时 TCP 分析
    支持在终端实时展示 TCP 的重传、乱序包以及快速重传检测,支持按单一连接或聚合数据进行分析。

  5. 智能的连接生命周期管理
    连接会根据协议自动适配超时时间,并通过白、黄、红三种颜色的视觉指示器来展现连接的“陈旧”程度。你可以一键保留历史(已关闭)的连接,方便后续进行取证和排查。

  6. GeoIP IP 地理位置富化
    内置国家/地区级别的查询,使用本地的 MaxMind GeoLite2 数据库,零外部网络请求,安全保护隐私。

  7. Vim/fzf 风格的强大过滤系统
    你可以通过 port:, src:, dst:, sni:, process:, proto: 等关键字快速过滤连接,甚至支持正则匹配 /(?i)pattern/

与传统工具的对比

  • netstat / ss 相比:RustNet 提供实时的、以连接为中心的视图,追踪状态、带宽和协议,而不仅仅是输出静态的连接列表。
  • Wireshark / tcpdump 相比:RustNet 能明确告诉你“是哪个应用程序(进程)发起了这个连接”。你可以用 RustNet 找出可疑进程,然后再通过它提供的 --pcap-export 导出流量交由 Wireshark 深度分析。

此外,由于它是基于终端的(TUI),非常适合通过 SSH 在远程服务器上使用,无需 X11 转发即可清晰掌握服务器的网络状况。

安装指南

RustNet 支持跨平台,以下是常见操作系统的安装方式:

macOS / Linux (通过 Homebrew):

1
2
brew tap domcyrus/rustnet
brew install rustnet

Ubuntu (25.10+):

1
2
sudo add-apt-repository ppa:domcyrus/rustnet
sudo apt update && sudo apt install rustnet

Fedora (42+):

1
2
sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet

Arch Linux:

1
sudo pacman -S rustnet

Windows (通过 Chocolatey):
(需要在管理员 PowerShell 中运行,且需预先安装勾选了 “WinPcap API-compatible Mode” 的 Npcap)

1
choco install rustnet

通过 Cargo 安装:

1
cargo install rustnet-monitor

运行权限说明

由于需要抓取网卡数据包,RustNet 运行时需要提升权限。
对于 Linux 用户,推荐赋予二进制文件相关的 capabilities(能力),这样就不需要每次都带 sudo 运行:

1
2
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(which rustnet)
rustnet

对于其他平台或想快速尝试,可以直接使用:

1
sudo rustnet

如果你经常需要排查“服务器上到底哪个进程在疯狂发包”或者“这个未知的外部连接是谁发起的”,RustNet 绝对是你工具箱中不可或缺的利器。下一篇文章中,我们将详细介绍 RustNet 的 TUI 操作和高级过滤语法,敬请期待!