r4m3nj33zu5/pcapsentry
GitHub: r4m3nj33zu5/pcapsentry
一款离线运行的蓝队 pcap 流量分析工具,通过 SOC 风格仪表板结合威胁检测引擎帮助安全人员快速分诊和排查网络入侵痕迹。
Stars: 0 | Forks: 0
# PcapSentry
一款专注于蓝队安全的本地 .pcap 文件分析工具。将捕获文件拖入浏览器,即可获得包含威胁检测、可疑会话评分、流量时间轴、地理地图、DNS/HTTP/TLS 日志和数据包检查的 SOC 风格仪表板——所有操作均在您的机器上离线运行。

## 前置条件
- **Rust** (stable) — https://rustup.rs
- **Node.js 18+** — https://nodejs.org
- **可选:** 用于 IP 地理定位的 MaxMind GeoLite2-City.mmdb(见下文)
## 构建
```
cd backend
cargo build --release
```
这会在编译 Rust 二进制文件之前,自动在 `frontend/` 目录中运行 `npm install` 和 `npm run build`。
编译后的二进制文件将位于 `backend/target/release/pcapsentry`。
## GeoLite2 设置(可选)
PcapSentry 使用免费的 MaxMind GeoLite2-City 数据库在地图视图上进行 IP 地理定位。
1. 在 https://www.maxmind.com 创建一个免费账户
2. 下载 `.mmdb` 格式的 **GeoLite2-City** 数据库
3. 将文件放置在 `assets/GeoLite2-City.mmdb`(位于项目根目录,与 `backend/` 和 `frontend/` 目录同级)
如果此文件不存在,PcapSentry 将正常启动——地理地图将显示一个占位符以说明设置步骤。
## 运行
```
cd backend
./target/release/pcapsentry
```
然后在浏览器中打开 http://localhost:7777。
PcapSentry 必须从 `backend/` 目录运行,以便它能定位到 `../frontend/dist` 静态文件和 `../assets/` 目录。
## 使用说明
1. 打开 http://localhost:7777
2. 将 `.pcap` 或 `.pcapng` 文件拖放到上传区域(或点击“浏览文件”)
3. 解析捕获内容时会出现一个进度条
4. 仪表板加载包含 13 个模块:**Triage**、**Alerts**、**Conversations**(通过结合 alert/beaconing/TLS 信号进行评分的可疑会话)、**Flows**、**DNS**、**HTTP**、**TLS**、**IOC**、**Geo**、**Stats**、**Timeline**、**Packets** 和 **Notes**
5. 点击任意发现结果,可在 Packet Inspector 中隔离其数据包;TCP 流可以重新组装并内联查看
6. “导出 PDF”生成报告;各模块均提供 CSV 导出功能
7. 会话将保存到磁盘,并在重启后重新出现在左侧边栏中;可以通过 `http://localhost:7777/?session=` 直接打开会话
8. 告警阈值、IP/域名白名单以及可选的 VirusTotal/Shodan API 密钥均可在设置面板中进行配置
## 支持的捕获格式
- **格式:** 经典 pcap 和 pcapng(通过 magic bytes 自动检测)
- **链路层:** Ethernet(包括 802.1Q VLAN 和 802.1ad QinQ 标记帧)、Linux cooked capture v1(SLL,来自 `tcpdump -i any`)和 v2(SLL2)
- 不支持:802.11/RadioTap 无线帧,以及在单个文件中混合不同接口链路层的 pcapng 文件
## 威胁检测
| 检测项 | 严重程度 |
|---|---|
| ARP 欺骗 | Critical |
| 已知恶意软件端口 (Metasploit, NetBus, IRC C2, …) | Critical / High |
| 端口扫描 (SYN) / Xmas / NULL / FIN 扫描 | Critical / High |
| Beaconing / C2 回调 (TCP + UDP,QUIC 除外) | High |
| DNS 隧道 / 高熵 DNS 标签 | High / Medium |
| 明文凭证 (HTTP Basic, FTP) | High |
| TLS 异常 / 已知的恶意 JA3 指纹 | High / Medium |
| SYN / ICMP / UDP 泛洪 (QUIC 除外) | Medium |
| 超大 ICMP, ICMP 扫描 | Medium |
| 异常流量体积 | Medium |
## 限制
- 非常大的捕获文件会被截断为前 500,000 个数据包——分析和检测仅覆盖这些数据包
- 不支持 802.11 无线帧解析
- PDF 导出通过 `printpdf` 使用服务器端渲染
## 项目结构
```
pcapsentry/
├── backend/ # Rust/Axum server
│ ├── src/
│ │ ├── main.rs # Server, routes, session state
│ │ ├── parser.rs # pcap/pcapng parsing, Ethernet/VLAN/SLL decode
│ │ ├── persistence.rs # Session save/load (gzipped JSON in data dir)
│ │ ├── reassembly.rs # TCP stream reassembly
│ │ ├── config.rs # Alert thresholds, whitelist, API keys
│ │ ├── analysis/
│ │ │ ├── mod.rs # Analysis orchestration
│ │ │ ├── indexed.rs # Pre-indexed packet view for detectors
│ │ │ ├── alerts.rs # Alert engine detections
│ │ │ ├── beaconing.rs # Beaconing candidate detection
│ │ │ ├── conversations.rs # Suspicious conversation scoring
│ │ │ ├── talkers.rs # Top talker aggregation
│ │ │ ├── dns_http.rs # DNS/HTTP extraction
│ │ │ ├── tls.rs # TLS/JA3 analysis
│ │ │ └── geo.rs # IP geolocation
│ │ └── export/ # PDF + CSV report generation
│ └── build.rs # Builds frontend before Rust compile
├── frontend/ # Svelte/Vite SPA
│ └── src/
│ ├── App.svelte
│ ├── components/ # UI components and dashboard modules
│ └── stores/ # Svelte stores
└── assets/
├── ja3_known_bad.csv # Known-bad JA3 fingerprint list
└── GeoLite2-City.mmdb # Place your MaxMind DB here (optional)
```
标签:AMSI绕过, IP 地址批量处理, Rust, SBOM分析, Svelte, 可视化界面, 威胁检测, 安全运营, 扫描框架, 本地离线, 网络流量审计, 通知系统, 速率限制