RustNet 实战指南:终端网络监控高级技巧

RustNet 实战指南:终端网络监控高级技巧
kikock在上一篇文章中,我们介绍了 RustNet 的强大之处。作为一款可以在终端下提供进程级、带有深度包检测(DPI)的网络监控工具,仅仅知道如何启动它是不够的。
本文将带你深入了解 RustNet 的终端用户界面(TUI)操作、快捷键,以及它极其强大的过滤与排序功能。
基础启动参数
通常情况下,我们赋予权限后直接运行 rustnet 即可。但为了适应不同的排查场景,它提供了一些有用的启动参数:
- 指定网卡:如果你的机器有多块网卡,可以使用
-i参数指定。1
rustnet -i eth0
- 监控本地环回地址:默认情况下 RustNet 不显示本地回环(Localhost)的连接,可以使用参数开启。
1
rustnet --show-localhost
- 禁用反向 DNS 解析:默认会自动解析 IP 对应的域名,如果你发现这拖慢了性能,可以禁用它。
1
rustnet --no-resolve-dns
- 调整刷新率:设置 TUI 界面的刷新频率(单位:毫秒)。
1
rustnet -r 500
- 导出 PCAP 抓包文件:在监控的同时将网络包保存下来,供后续 Wireshark 等工具深入分析(该功能支持保留进程归属信息)。
1
rustnet --pcap-export out.pcap
快捷键盘控制
RustNet 的交互深受 Vim 影响,非常契合开发者的操作习惯。以下是核心快捷键:
全局操作
q或 **Ctrl+C**:退出程序。- **
t**:切换历史模式。默认情况下关闭的连接会被清除,开启此模式后,可以保留历史连接记录以供取证和审查。 - **
r**:重置当前视图和统计数据。 - **
i**:打开/关闭网络接口统计信息面板。在这里可以看到各个网卡的收发速率(RX/TX)、错误包和丢包情况。
视图导航
↑/k和 **↓/j**:上下移动选择行。PageUp/PageDown或 **Ctrl+B/Ctrl+F**:上下翻页。- **
g**:跳转到列表顶部。 - **
G**:跳转到列表底部。 - **
Enter**:查看当前选中连接的详细信息面板。 - **
Esc**:关闭详情面板或清除当前的输入/过滤状态。
数据排序
- **
s**:切换排序的列(例如在协议、地址、状态、服务、带宽、进程名之间循环切换)。- 小技巧:连续按
s直到列标题显示 “Down/Up ↓”,即可快速找出当前占用带宽最大的“流量大户”。
- 小技巧:连续按
- **
S(Shift + s)**:切换正序/倒序排列。
强大的过滤语法 (Vim/fzf 风格)
面对服务器上成百上千的连接,快速过滤出你需要关注的连接是排查问题的关键。在 RustNet 界面按下 / 键即可进入过滤模式。
基础关键字过滤
你可以直接输入关键字(如 /google)进行全局模糊匹配,或者使用更精确的前缀过滤:
port:- 过滤端口(包含特定数字,如port:44会匹配 443, 8080 等)。sport:- 仅过滤源端口(Source port)。dport:- 仅过滤目标端口(Destination port)。src:- 过滤源 IP 地址(如src:192.168)。dst:- 过滤目标 IP 地址(或域名)。process:- 过滤进程名(如process:ssh、process:nginx)。sni:- 过滤 HTTPS/TLS 握手过程中的 SNI(服务器名称指示),非常适合抓取访问了特定域名的 HTTPS 请求(如sni:github.com)。app:- 过滤识别出的应用协议(如app:openssh)。proto:- 过滤底层协议(如proto:tcp、proto:udp、proto:quic)。
状态 (State) 过滤
由于 RustNet 是实时追踪连接的,你可以根据连接生命周期进行过滤:
state:established- 仅查看已建立的活跃连接。state:syn_recv- 查看半开连接状态(有助于发现 SYN Flood 攻击)。state:quic_connected- 仅查看活跃的 QUIC 连接。state:dns_query- 查看正在进行的 DNS 查询。
组合过滤与正则表达式
你可以组合多个条件,条件之间使用空格分隔(相当于逻辑 AND)。
- 查找由 Nginx 进程发起的 80 端口连接:
1
sport:80 process:nginx
- 查找发往 Google 的 HTTPS 请求:
1
dport:443 sni:google.com
- 高级正则匹配:支持使用
/(?i)pattern/格式进行正则表达式匹配((?i)表示忽略大小写)。
连接的“生命周期”颜色指示
为了让你直观地感受到哪些连接已经处于空闲状态,RustNet 使用了巧妙的颜色编码:
- 白色:活跃连接(距超时时间还有 >25% 的余量)。
- 黄色:陈旧连接(警告,剩余时间 10% - 25%)。
- 红色:即将超时的严重连接(剩余时间 < 10%)。
RustNet 会根据协议类型智能设置超时阈值。例如:HTTP(S) 通常是 10 分钟(支持 keep-alive),SSH 则长达 30 分钟,而 DNS 查询如果 30 秒无响应就会被标记。
总结
RustNet 将底层的 eBPF 采集、libpcap 分析与直观优雅的 TUI 界面完美结合。掌握了这些过滤和控制技巧,以后在终端下排查诸如“应用卡顿、带宽被异常占用、未知对外发包”等网络疑难杂症时,你将会如虎添翼。
