finn-abel/MiniSniffer
GitHub: finn-abel/MiniSniffer
MiniSniffer 是一个用 C 语言编写、基于 libpcap 的轻量级数据包嗅探器和网络分析器,支持实时抓包、pcap 离线分析及多种应用层协议元数据解码。
Stars: 0 | Forks: 0
# MiniSniffer
MiniSniffer 是一个基于 libpcap 构建的小型 C 语言抓包器和网络分析器。
它可以捕获实时数据包(或读取 pcap 文件),解析常见的 IPv4/IPv6
链路层格式,应用过滤器,打印易读的摘要,解码
应用元数据,并可以将日志记录为 CSV/JSON 格式或报告捕获统计信息。
它是为学习、本地诊断和授权的网络
观测而构建的。它**不会**解密流量、注入或修改数据包,也**不会**
执行任何用于 MITM(中间人攻击)、凭据捕获、规避的操作,更**不能**在您不拥有或未获授权检查的网络上使用。
## 核心亮点
- 使用 libpcap 进行实时捕获,或使用 `--read` 进行离线重放 / 使用 `--write` 将捕获保存为 pcap
- 针对 TCP、UDP、ICMP/ICMPv6、ARP 等的 IPv4/IPv6 解析
- 协议、端口、主机、payload(文本/十六进制)和应用元数据过滤器
- 内核级 BPF 预过滤(仅用于优化;使用 `--no-bpf` 禁用)
- 应用元数据解码:HTTP、DNS/mDNS、TLS ClientHello、DHCP 以及保守的 QUIC Initial
- 有界限的 IPv4 分片和 TCP 流重组
- 人类可读的文本、JSON Lines (`--json`) 和 CSV (`--log`) 输出,以及 `--stats` 统计信息
## 环境要求
- C11 编译器、`make` 和 libpcap
| 平台 | 安装命令 |
| --- | --- |
| macOS (Homebrew) | `brew install libpcap pkg-config` |
| Debian / Ubuntu | `sudo apt-get install build-essential libpcap-dev pkg-config` |
| Fedora / RHEL | `sudo dnf install gcc make libpcap-devel pkgconf-pkg-config` |
| Arch | `sudo pacman -S base-devel libpcap pkgconf` |
实时捕获需要提升的权限:使用 `sudo` 运行,或者在 Linux 上为
二进制文件授予 capabilities 而不是 root 权限:
```
sudo setcap cap_net_raw,cap_net_admin+eip ./MiniSniffer
```
## 构建
```
make # builds ./MiniSniffer
make install # installs binary, man page, and shell completions (honors PREFIX/DESTDIR)
make WITH_LIBIDN2=1 # optional: enables IDNA domain matching (--domain-match idna)
```
构建时如果检测可用,将使用 `pkg-config` 来配置 libpcap,并回退到
`-lpcap`。如果您的工具链需要,可以在 `make` 命令行中覆盖 `CC`、
`CFLAGS`、`PKG_CONFIG` 或 `LDLIBS`。仓库内的 `packaging/homebrew/minisniffer.rb`
保留了 Homebrew formula,用于本地/`--HEAD` 安装(尚未发布到 tap)。
## 快速开始
```
sudo ./MiniSniffer --count 5 # 5 packets, default interface
sudo ./MiniSniffer --interface en0 --count 5 # specific interface
sudo ./MiniSniffer --protocol tcp --count 20 --stats # filter + summary stats
sudo ./MiniSniffer --count 10 --log packets.csv # log to CSV
sudo ./MiniSniffer --protocol tcp --payload --payload-contains "GET " # payload filter
./MiniSniffer --read capture.pcap --protocol tcp --count 10 # offline, no sudo needed
./MiniSniffer --list-interfaces # see available interfaces
```
运行 `./MiniSniffer --help` 获取完整的选项列表,或运行 `man ./man/minisniffer.1`
查看每个 flag 的详细文档。
## 过滤器
过滤器使用 **AND**(与)逻辑:当启用多个过滤器时,每一个都必须匹配,
数据包才会被显示、记录、计数或包含在统计信息中。`--count`
是在过滤*之后*应用的。
```
sudo ./MiniSniffer --protocol tcp --port 443 --host 142.250.190.14 --count 10
sudo ./MiniSniffer --payload-hex "47 45 54 20" # matches "GET "
sudo ./MiniSniffer --decode-app --app dns --dns-query example.com --dns-type A
sudo ./MiniSniffer --decode-app --app tls --tls-sni example.com --tls-alpn h2
```
`--protocol`、`--port` 和 `--host` 会被编译为内核级 BPF 过滤器,
这纯粹是为了优化;每一个显示的数据包仍然会在软件中重新检查,
而 `--no-bpf` 会禁用此功能。Payload 和应用层过滤器始终在
软件中运行。应用过滤器需要 `--decode-app`;添加 `--reassemble` 以
跨多个 TCP segment 对流进行分类。HTTP Host、DNS query 和 TLS SNI
过滤器默认使用规范化(不区分大小写)的域名匹配 —
`--domain-match exact` 或 `idna` 可以更改此设置。
## 输出
每个显示的数据包对应一行:
```
[001] TCP 192.168.1.25:51432 -> 142.250.190.14:443 size=54
[002] ICMP 192.168.1.25 -> 8.8.8.8 size=98
```
`--payload` 会添加有界限的十六进制/ASCII 预览,`--decode-app` 会打印解码后的
应用元数据(状态为 `decoded`、`need_more`、`malformed`、
`truncated` 或 `no_match`),而 `--json` 会输出 JSON Lines 而不是文本。
`--log ` 写入 CSV。应用元数据在输出前会被转义,并且
CSV 单元格会中和电子表格公式字符。有关 JSON 对象结构和完整的 CSV schema,请参阅 man 手册页。
## 开发
```
make test # unit tests
make check # tests + sanitizers + format-check + static-check
make bench # lightweight local benchmarks
make fuzz-smoke # replay fuzz corpora under ASan/UBSan
make coverage # LLVM line + branch coverage
make clean
```
当 clang-format / clang-tidy / cppcheck 不可用时,`make check` 会跳过
格式/静态检查并输出提示消息。模糊测试工具位于 `fuzz/`
目录下(基于 libFuzzer,并为没有链接 libFuzzer runtime 的工具链提供了
独立的冒烟测试驱动程序)。GitHub Actions 工作流作为手动触发
(`workflow_dispatch`)的质量门禁包含在内。
## 项目布局
```
include/ Public headers fuzz/ Fuzzing harnesses + corpus
src/ Implementation man/ Man page (minisniffer.1)
tests/ Unit tests completions/ Bash, zsh, fish completions
bench/ Local benchmarks packaging/ Packaging metadata
docs/ Architecture docs Makefile Build/test/bench/fuzz/install
```
## 文档
- [架构](docs/architecture.md) — 模块设计、重组模型和内部限制
- 手册页:`man ./man/minisniffer.1`
- 完整的选项参考:`./MiniSniffer --help`
## 许可证
参见 [LICENSE](LICENSE)。
```
```
标签:协议解码, 客户端加密, 情报分析, 数据包解析, 目录遍历, 端点发现, 系统分析, 网络分析, 网络诊断