matthart1983/netwatch

GitHub: matthart1983/netwatch

一款无需配置的终端实时网络诊断工具,在单个界面同时提供接口、连接与包捕获的即时可视化。

Stars: 747 | Forks: 28

NetWatch

Real-time network diagnostics in your terminal. One command, zero config, instant visibility.

crates.io Release Platform License Wiki

NetWatch — Dashboard, Connections, Packets, Topology

启动 → 即时查看所有接口、连接和健康探测。在事件消失前启动飞行记录仪。

## 安装 ``` # Homebrew(macOS / Linux) brew install matthart1983/tap/netwatch # Cargo cargo install netwatch-tui # 预编译二进制文件 — 请参阅 Releases ```
所有平台与选项 | 平台 | 下载 | |------|------| | Linux (x86_64) | [`netwatch-linux-x86_64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) | | Linux (aarch64) | [`netwatch-linux-aarch64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) | | macOS (Intel) | [`netwatch-macos-x86_64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) | | macOS (Apple Silicon) | [`netwatch-macos-aarch64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) | **从源码构建:** ``` git clone https://github.com/matthart1983/netwatch.git && cd netwatch cargo build --release ``` **依赖项:** Rust 1.70+,libpcap(在 Linux 上执行 `sudo apt install libpcap-dev`,macOS 已包含)
## 快速开始 ``` netwatch # Interface stats, connections, config sudo netwatch # Full mode — adds health probes + packet capture netwatch --generate-config ``` ### 飞行记录仪 捕获在你能检查之前就消失的瞬态故障: ``` Shift+R Arm a rolling 5-minute recorder Shift+F Freeze the current incident window Shift+E Export an incident bundle to ~/netwatch_incident_YYYYMMDD_HHMMSS/ ``` 每个数据包都包含 `summary.md`、`connections.json`、`health.json`、`bandwidth.json`、`dns.json`、`alerts.json`、`manifest.json` 和 `packets.pcap`(如果捕获数据可用)。 ## 为什么选择 NetWatch? 大多数网络工具迫使你二选一:**观察正在发生的事情**(iftop、bandwhich)或**检查数据包**(Wireshark、tshark)。NetWatch 在单个终端中同时提供这两者 —— 从 10,000 英尺的仪表盘视图到单个数据包字节。 | 你得到什么 | 速度 | |---|---| | 每个接口的实时 RX/TX 火花线 | **即时** | | 每个连接及其进程名 + PID | **即时** | | 网关与 DNS 健康探测及延迟热图 | **即时** | | Wireshark 风格的数据包捕获与解码 | 一次按键 | | 滚动事件捕获与冻结导出数据包包 | 一次按键 | | 带 traceroute 的网络拓扑图 | 一次按键 | | PCAP 导出用于离线分析 | 一次按键 | **无需配置文件,无需设置,无需命令行参数。** ## 截图
Dashboard
Interfaces, bandwidth, health, top connections
Connections
Every socket with process name, PID, GeoIP
Interfaces
Per-interface detail with sparkline history
Topology
Network map with health indicators + traceroute
## 功能特性 ### 🖥️ 仪表盘 一目了然 —— 接口、聚合带宽图、顶级连接、网关/DNS 健康探测,以及彩色延迟热图。5 秒内即可上手。 ### 🔌 连接 每个打开的套接字包含 **进程名**、PID、协议、状态、远程地址、GeoIP 位置,以及每个连接的 **延迟火花线**。可按任意列排序,跳转到过滤后的数据包视图。 ### 📡 接口 每个接口的详细信息:IPv4/IPv6 地址、MAC、MTU、总 RX/TX 及独立的火花线历史、错误与丢包。 ### 📦 数据包捕获 带深度协议解码的实时捕获 —— **DNS**(查询、类型、响应码)、**TLS**(版本、SNI)、**HTTP**(方法、路径、状态)、**ICMP**、**ARP**、**DHCP**、**NTP**、**mDNS**,以及 25+ 种服务标签。TCP 流重组、握手时序、显示过滤器、BPF 捕获过滤器、书签和 PCAP 导出。 ### 📈 进程 按实时 RX/TX 速率、总量和连接数排名的进程带宽排行。适用于发现产生噪音的主机或带宽突增背后的进程。 ### 🎥 飞行记录仪 启动一个滚动 5 分钟捕获窗口,可手动冻结或在关键网络智能告警触发时自动冻结。导出一个自包含的事件数据包,包含可读摘要、`.pcap`、连接与进程上下文、健康样本、DNS 分析和告警历史。 ### 🗺️ 拓扑 ASCII 网络地图,显示本机、网关、DNS 服务器及顶级远程主机,带连接数和颜色编码的健康指示器。内置 **traceroute** 可从任意主机发起。 ### 📊 统计 协议分层表,包含包数、字节总数和分布条。TCP 握手直方图(含最小/平均/中位数/p95/最大值)。 ### ⏱️ 时间线 甘特图风格连接时间线 —— 显示每个连接活跃的时间段,按 TCP 状态着色。可调节窗口从 1 分钟到 1 小时。 ### ⚙️ 设置 内置覆盖层设置,可配置主题、默认标签、刷新率、捕获接口、数据包跟随模式、GeoIP 路径、BPF 过滤器和告警阈值。使用 `,` 打开,`S` 保存更改。 ## 显示过滤器 Wireshark 风格的过滤语法(在“数据包”标签页中): ``` tcp # Protocol 192.168.1.42 # IP address (src or dst) ip.src == 10.0.0.1 # Directional port 443 # Port stream 7 # Stream index contains "hello" # Text search tcp and port 443 # Combinators !dns # Negation google # Bare word → contains "google" ``` ## 键盘控制 | 按键 | 操作 | |------|------| | `1`–`8` | 切换标签页 | | `↑` `↓` | 导航 | | `p` | 暂停 / 恢复 | | `r` | 强制刷新 | | `R` | 启动 / 重置飞行记录仪 | | `F` | 冻结当前事件窗口 | | `E` | 导出事件数据包 | | `/` | 过滤(数据包) | | `c` | 开始 / 停止捕获(数据包) | | `s` | 排序 / 流视图 | | `w` | 导出为 .pcap | | `T` | traceroute | | `W` | Whois 查询 | | `t` | 切换主题 | | `,` | 设置 | | `?` | 帮助 | | `q` | 退出 |
完整按键参考 ### 连接 | 按键 | 操作 | |------|------| | `s` | 循环排序列 | | `Enter` | 跳转到带连接过滤的数据包 | | `T` | 对远程 IP 执行 traceroute | | `W` | Whois 查询 | | `e` | 导出连接为 JSON + CSV | | `g` | 切换 GeoIP 列 | ### 数据包 | 按键 | 操作 | |------|------| | `c` | 开始 / 停止捕获 | | `R` | 启动 / 解除飞行记录仪 | | `F` | 冻结事件窗口 | | `E` | 导出事件数据包 | | `i` | 循环切换捕获接口 | | `b` | 设置 BPF 捕获过滤器 | | `/` | 显示过滤器 | | `s` | 流视图 | | `w` | 导出 .pcap | | `x` | 清除数据包 | | `m` | 书签数据包 | | `n` / `N` | 下一个 / 上一个书签 | | `f` | 自动跟随 | | `W` | 对选中的数据包 IP 执行 Whois 查询 | ### 流视图 | 按键 | 操作 | |------|------| | `→` `←` | 过滤 A→B / B→A | | `a` | 双向 | | `h` | 切换十六进制/文本 | | `Esc` | 关闭 | ### 拓扑 | 按键 | 操作 | |------|------| | `T` | 对选中的主机执行 traceroute | | `Enter` | 跳转到该主机的连接 | | `Esc` | 关闭 traceroute 覆盖层 | ### 时间线 | 按键 | 操作 | |------|------| | `t` | 切换时间窗口(1m–1h) | | `Enter` | 跳转到连接 | ### 进程 | 按键 | 操作 | |------|------| | `↑` `↓` | 导航 | | `e` | 导出连接为 JSON + CSV | ### 设置 | 按键 | 操作 | |------|------| | `↑` `↓` | 导航设置 | | `Enter` | 编辑选中设置 | | `←` `→` | 切换主题 | | `S` | 保存配置 | | `Esc` | 关闭 |
## 事件数据包 当飞行记录仪处于武装状态时,NetWatch 维护一个有限的滚动事件窗口。在冻结或导出时,它会写入: ``` netwatch_incident_20260403_103501/ summary.md manifest.json connections.json health.json bandwidth.json dns.json alerts.json packets.pcap # present when packets were captured ``` 这使得错误报告、事件回顾和演示变得更加容易:你保留了数据包证据以及解释它的运行上下文。 ## 权限 | 功能 | `netwatch` | `sudo netwatch` | |------|---:|---:| | 接口统计与速率 | ✅ | ✅ | | 活跃连接 | ✅ | ✅ | | 网络配置 | ✅ | ✅ | | 健康探测(ICMP) | ❌ | ✅ | | 数据包捕获 | ❌ | ✅ | | 降级优雅 —— 需要 root 的功能会显示明确消息,不会崩溃。 | ## 主题 5 个内置主题,可通过 `t` 即时切换: **深色**(默认)· **浅色** · **Solarized** · **Dracula** · **Nord** 主题更改会立即应用。使用 `S` 在设置覆盖层中保存。 ## 配置 NetWatch 在零配置下运行良好,但你也可以持久化偏好设置:主题、默认标签、刷新率、捕获接口、数据包跟随行为、GeoIP 数据库路径、BPF 过滤器和告警阈值。 ``` netwatch --generate-config ``` 这会将启动配置文件写入你的平台配置目录。你也可以在应用内使用 `,` 实时编辑设置并使用 `S` 保存。 ## 工作原理 | 采集器 | 间隔 | macOS | Linux | |--------|------|-------|-------| | 接口统计 | 1s | `netstat -ib` | `/sys/class/net/*/statistics` | | 连接 | 2s | `lsof -i -n -P` | `/proc/net/tcp` + `/proc/*/fd` | | 健康探测 | 5s | `ping` | `ping` | | 数据包捕获 | 实时 | libpcap (BPF) | libpcap | | GeoIP | 按需 | MaxMind .mmdb / ip-api.com | MaxMind .mmdb / ip-api.com | ``` Raw bytes → Ethernet → IPv4/IPv6/ARP → TCP/UDP/ICMP → DNS/TLS/HTTP/DHCP/NTP ↓ Stream tracking · Handshake timing Expert info · Payload extraction ``` ## 相关项目 **[ESSH](https://github.com/matthart1983/essh)** — 如果你管理被监控的主机,ESSH 为相同的工作流而构建。相同的 TUI 审美,纯 Rust SSH 客户端,支持并发会话、实时远程主机诊断(CPU、内存、磁盘、进程 —— 无需安装代理)、集群管理、文件传输和端口转发。连接 NetWatch 所观察的位置。 **[NetWatch Cloud](https://www.netwatchlabs.com)** — 为你运行 NetWatch 的主机提供托管集群监控。Tiny Rust 代理在每个 Linux 主机上运行,实时仪表盘,邮件 + Slack 告警(延迟、丢包或主机离线)。**免费试用。** ## 贡献 欢迎贡献!请参考 [CONTRIBUTING.md](CONTRIBUTING.md) 获取编码规范,以及 [WIKI.md](WIKI.md) 获取当前架构指南。 ## 许可证 MIT
标签:Cargo, Homebrew, NetWatch, Rust, TUI, 即时可视化, 可视化界面, 实时网络诊断, 开源, 接口监控, 流量捕获, 系统分析, 终端监控, 网络健康探测, 网络分析, 网络拓扑, 网络探针, 网络故障排查, 网络流量审计, 网络诊断工具, 网络连通性, 自动化侦查, 连接跟踪, 通知系统, 零配置, 飞行记录器