matthart1983/netwatch
GitHub: matthart1983/netwatch
一款无需配置的终端实时网络诊断工具,在单个界面同时提供接口、连接与包捕获的即时可视化。
Stars: 747 | Forks: 28
NetWatch
Real-time network diagnostics in your terminal. One command, zero config, instant visibility.
启动 → 即时查看所有接口、连接和健康探测。在事件消失前启动飞行记录仪。
## 安装
```
# 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, 即时可视化, 可视化界面, 实时网络诊断, 开源, 接口监控, 流量捕获, 系统分析, 终端监控, 网络健康探测, 网络分析, 网络拓扑, 网络探针, 网络故障排查, 网络流量审计, 网络诊断工具, 网络连通性, 自动化侦查, 连接跟踪, 通知系统, 零配置, 飞行记录器