georgeglarson/netgrep

GitHub: georgeglarson/netgrep

基于 Rust 的现代化网络流量分析工具,支持 TLS 解密、TCP 流重组和协议感知匹配,填补 ngrep 与 tshark 之间的空白。

Stars: 0 | Forks: 0

# netgrep [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/12bab2713c141038.svg)](https://github.com/georgeglarson/netgrep/actions/workflows/ci.yml) **面向网络的 Grep,适用于后 TLS 时代。** [ngrep](https://github.com/jpr5/ngrep) 的现代替代品,具备 TCP 流重组、TLS 解密和协议感知匹配功能。填补了 `ngrep`(过于简单)和 `tshark`(过于笨重)之间的空白。 ## 功能 - **实时捕获 & pcap 回放** — 从任意接口捕获或读取 pcap/pcapng 文件 - **BPF 过滤器** — 标准 tcpdump 过滤器语法 (`-F "tcp port 443"`) - **正则匹配** — 针对重组后的 payload 进行匹配,并带有颜色高亮 - **TCP 流重组** — 双向,带重排序处理(杀手级功能) - **TLS 1.2 & 1.3 解密** — 通过 SSLKEYLOGFILE 支持 AES-128-GCM, AES-256-GCM, ChaCha20-Poly1305 - **HTTP/1.1 & HTTP/2** — 解析 headers、methods、status codes;通过连接前言自动检测 HTTP/2 - **DNS 感知** — 解析 queries/responses,针对域名和记录数据进行匹配 - **交互式 TUI** — 数据包表格 + 详情面板 + 状态栏 - **多种输出格式** — 彩色文本, JSON (`--json`), hex dump (`-x`) - **Pcap 输出** — 将匹配的数据包写入 pcap 文件 (`-O`) - **兼容 ngrep 的 flags** — `-i`, `-v`, `-x`, `-q`, `-n`, `-d`, `-I`, `-F` ## 安装 ### 前置条件 - Rust 1.85+ (edition 2024) - `libpcap-dev` (Debian/Ubuntu) 或 `libpcap-devel` (RHEL/Fedora) - 实时捕获需要 Root/sudo 权限 ### 从源码构建 ``` # 安装 libpcap development headers sudo apt install libpcap-dev # Debian/Ubuntu sudo dnf install libpcap-devel # Fedora/RHEL # 构建并安装 cargo install --path . ``` ## 用法 ``` # 捕获 5 个流/数据包 sudo netgrep -n 5 # 在 DNS 流量中 Grep 特定模式 sudo netgrep -F "udp port 53" "lastpass" # 在 pcap 文件中搜索密码 netgrep -I capture.pcap "password" # 启用 TLS 解密的 HTTP-aware 模式 sudo netgrep --http --keylog /path/to/sslkeylog.txt "Set-Cookie" # DNS 模式 sudo netgrep --dns -F "udp port 53" "example\\.com" # 交互式 TUI 模式 sudo netgrep --tui # JSON 输出,忽略大小写 sudo netgrep --json -i "api[_-]key" ``` ## 参数标志 | 标志 | 长选项 | 描述 | |------|------|-------------| | | `PATTERN` | 用于匹配 payload 的正则表达式模式 | | `-F` | `--bpf` | BPF 过滤器表达式 (tcpdump 语法) | | `-d` | `--interface` | 用于捕获的网络接口 | | `-I` | `--input` | 从 pcap/pcapng 文件读取 | | `-i` | `--ignore-case` | 忽略大小写匹配 | | `-v` | `--invert` | 反向匹配(显示不匹配项) | | | `--json` | 输出为 JSON | | `-n` | `--count` | 捕获 N 个匹配后退出 | | `-p` | `--no-promisc` | 不使用混杂模式 | | | `--no-reassemble` | 禁用 TCP 流重组 | | `-x` | `--hex` | 显示 payload 的十六进制转储 | | | `--http` | HTTP 感知模式(解析 headers, methods) | | | `--dns` | DNS 感知模式(解析 queries/responses) | | | `--keylog` | 用于 TLS 解密的 SSLKEYLOGFILE 路径 | | `-q` | `--quiet` | 安静模式(仅显示 payload) | | `-L` | `--list-interfaces` | 列出可用接口 | | `-s` | `--snaplen` | 截断长度 (默认: 65535) | | `-O` | `--output-file` | 将匹配的数据包写入 pcap 文件 | | | `--tui` | 交互式 TUI 模式 | | `-B` | `--buffer-size` | 内核缓冲区大小 | | `-l` | `--line-buffered` | 每次匹配后刷新 stdout | ## 架构 ``` src/ ├── main.rs # CLI definition (clap), main capture loop ├── capture/mod.rs # PacketSource: live capture + pcap file reading ├── protocol/ │ ├── mod.rs # Packet parsing, Transport enum, StreamKey │ ├── dns.rs # DNS query/response parser │ ├── http.rs # HTTP/1.1 request/response parser │ └── http2.rs # HTTP/2 frame parser + HPACK decoder ├── reassembly/mod.rs # TCP stream reassembly (emits on PSH/FIN/RST) ├── output/mod.rs # Formatter: text, JSON, hex dump, HTTP mode ├── tls/ │ ├── mod.rs # TLS decryptor: per-connection state machine │ ├── keylog.rs # SSLKEYLOGFILE parser (TLS 1.2 + 1.3) │ └── decrypt.rs # AES-GCM/ChaCha20 decryption, HKDF, TLS PRF └── tui/ ├── mod.rs # TUI mode: event loop, rendering (ratatui) └── event.rs # Data types for TUI display ``` ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:DLL注入, DNS解析, GitHub搜索工具, HTTP/2, ngrep替代, pcap, regex匹配, Rust, TCP重组, TLS解密, TUI, 内核驱动, 可视化界面, 开源项目, 抓包工具, 服务管理, 流量审计, 流量监控, 网络协议, 网络嗅探, 网络安全, 网络流量审计, 通知系统, 防御绕过, 隐私保护