domcyrus/rustnet
GitHub: domcyrus/rustnet
一款跨平台终端 TUI 网络监控工具,能将 TCP/UDP/QUIC 连接实时映射到进程并进行深度包检测。
Stars: 2035 | Forks: 64
RustNet
Per-process network monitoring for your terminal: live TCP, UDP, and QUIC connections with deep packet inspection, sandboxed by default.
实时洞察您机器的每一个连接、其所有者及其使用的协议。无需 tcpdump、X11 转发或 root 管道。
## 功能特性 - **按进程溯源**:通过 Linux 上的 eBPF、macOS 上的 PKTAP、Windows 和 FreeBSD 上的原生 API,将每一个 TCP、UDP 和 QUIC 连接映射到其所属进程。Wireshark 和 tcpdump 无法做到这一点;`netstat` / `ss` 也无法显示实时状态。 - **深度包检测**:无需外部解析器,即可识别 HTTP、HTTPS/TLS (SNI)、DNS、SSH、QUIC、NTP、mDNS、LLMNR、DHCP、SNMP、SSDP 和 NetBIOS。 - **安全沙箱**:Landlock (Linux 5.13+)、Seatbelt (macOS)、令牌权限剥离 + 任务对象子进程阻止 (Windows)。在 libpcap 初始化后立即降权。参见 [SECURITY.md](SECURITY.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 无法提供此功能,因为它只能看到数据包,而看不到套接字。 - **以连接为中心的视图**:实时跟踪每个连接的状态、带宽和协议 - **SSH 友好**:TUI 可通过 SSH 运行,因此您可以快速查看远程服务器上发生的情况,而无需转发 X11 或抓取流量 RustNet 是数据包捕获工具的绝佳补充。使用 RustNet 来查看*是什么发起了连接*。要进行深度取证分析,请使用 `--pcap-export` 捕获带有进程信息的数据包,然后通过 `scripts/pcap_enrich.py` 进行充实,并在 Wireshark 中结合完整的 PID/进程上下文进行分析。详情请参见 [PCAP 导出](USAGE.md#pcap-export) 和 [与类似工具的比较](ARCHITECTURE.md#comparison-with-similar-tools)。 基于 ratatui、libpcap、eBPF (libbpf-rs)、DashMap、crossbeam、ring、MaxMind GeoLite2 和 Landlock 构建。完整的依赖项细分请参见 [ARCHITECTURE.md](ARCHITECTURE.md#dependencies)。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.md](ARCHITECTURE.md)。接口统计监控
RustNet 在所有支持的平台上提供实时网络接口统计信息: - **概览标签页**:显示活动接口及其当前速率、错误和丢包情况 - **接口标签页**(按 `i`):包含所有接口综合指标的详细表格 - **跨平台**:Linux (sysfs)、macOS/FreeBSD (getifaddrs)、Windows (GetIfTable2 API) - **智能过滤**:Windows 会自动排除虚拟/过滤适配器 有关解释接口统计数据和平台特定行为的详细文档,请参见 [USAGE.md](USAGE.md#interface-statistics)。 **可用指标:** - 总字节数和数据包数(RX/TX) - 错误计数器(接收和发送) - 数据包丢弃(队列溢出) - 冲突(传统指标,在现代网络中很少使用) 统计信息每 2 秒在一个后台线程中收集,对性能的影响极小。高级过滤示例
**关键字过滤:** - `port:44` - 包含 "44" 的端口(443、8080、4433) - `sport:80` - 包含 "80" 的源端口 - `dport:443` - 包含 "443" 的目标端口 - `src:192.168` - 包含 "192.168" 的源 IP - `dst:github.com` - 包含 "github.com" 的目标 - `process:ssh` - 包含 "ssh" 的进程名 - `sni:api` - 包含 "api" 的 SNI 主机名 - `app:openssh` - 使用 OpenSSH 的 SSH 连接 - `state:established` - 按协议状态过滤 - `proto:tcp` - 按协议类型过滤 **状态过滤:** - `state:syn_recv` - 半开连接(SYN 洪水攻击检测) - `state:established` - 仅显示已建立的连接 - `state:quic_connected` - 活跃的 QUIC 连接 - `state:dns_query` - DNS 查询连接 **组合示例:** - `sport:80 process:nginx` - 来自 80 端口的 Nginx 连接 - `dport:443 sni:google.com` - 到 Google 的 HTTPS 连接 - `process:firefox state:quic_connected` - Firefox 的 QUIC 连接 - `dport:22 app:openssh state:established` - 已建立的 OpenSSH 连接连接生命周期与视觉指示器
RustNet 在移除连接前使用智能超时和视觉警告: **视觉陈旧度指示器:** - **白色**:活跃(< 超时时间的 75%) - **黄色**:陈旧(超时时间的 75-90%) - **红色**:危急(> 超时时间的 90%) **协议感知超时:** - **HTTP/HTTPS**:10 分钟(支持 keep-alive) - **SSH**:30 分钟(长会话) - **TCP 活跃**:10 分钟,空闲:5 分钟 - **QUIC 已连接**:3 分钟(或对端传输参数的空闲超时,如果存在);`Initial`/`Handshaking`:60 秒 - **DNS**:30 秒 - **TCP CLOSED**:5 秒 示例:一个 HTTP 连接在 7.5 分钟时变黄,9 分钟时变红,并在 10 分钟时被移除。 完整的超时详情请参见 [USAGE.md](USAGE.md)。标签:Awesome, AWS, DPI, PKTAP, QUIC, Ratatui, Rust, TCP, TUI, UDP, Wireshark替代, 协议识别, 可视化界面, 后渗透, 开源, 沙箱, 深度包检测, 系统管理, 终端UI, 网络安全, 网络安全分析, 网络流量分析, 网络流量审计, 请求拦截, 进程级网络分析, 连接归属, 通知系统, 防御绕过, 隐私保护