nlink-jp/pcap-analyzer-mcp
GitHub: nlink-jp/pcap-analyzer-mcp
一个基于容器化 tshark 的 MCP 服务器,让 AI 代理能够安全、渐进地分析 GB 级 pcap/pcapng 抓包文件。
Stars: 0 | Forks: 0
# pcap-analyzer-mcp
[日本語](README.ja.md)
一个允许 AI 代理分析数据包抓取的 MCP 服务器。
代理无法直接处理 pcap 文件,而简单地封装 tshark 也无济于事:
`tshark -V` 为单个数据包生成数百行输出。`pcap-analyzer-mcp`
运行一个**在容器内版本锁定的 tshark**,以**只读**方式挂载抓包文件,
并在内联返回小体积结果的同时,将大体积结果作为 JSONL 写入到
工作区——从而让代理能够逐步缩小 GB 级抓包文件的分析范围,
而不是淹没在它的首次响应中。
## 为什么使用容器
在镜像构建时锁定 tshark 版本可同时解决三个问题:
- **可复现性** — `-T fields` 的字段名称和 `-z` 的统计格式
在不同 tshark 版本之间会发生变化。该镜像固定了版本,无论宿主机上安装了什么,
并且每个结果都会记录生成该结果的 tshark 版本和镜像摘要。
- **隔离性** — Wireshark 解析器会解析由攻击者控制的数据。
容器在 `--network=none` 下运行,以非 root 用户身份运行,并且丢弃了所有的
capabilities。
- **无意外抓包** — `dumpcap` 二进制文件已从镜像中删除,
并且没有网络。实时抓包在构建结构上是不可能的,而不是
依靠策略限制。
抓包文件**从不会被复制**。它的目录以只读方式挂载,因此
原始文件在字节层面保持完全一致——这对于 GB 级的文件既节省资源,又
确保证据处理的正确性。
## 环境要求
- [Podman](https://podman.io/) (无根模式;无守护进程)
- macOS: `podman machine start`,建议分配 8GB 虚拟机内存。抓包文件必须
位于共享路径下 (`/Users`, `/private/tmp`, `/var/folders`)。
## 安装
```
git clone https://github.com/nlink-jp/pcap-analyzer-mcp.git
cd pcap-analyzer-mcp
make build # → dist/pcap-analyzer-mcp
make runtime-image # builds the tshark analysis image locally
```
## 用法
在你的客户端中将该二进制文件注册为 MCP 服务器:
```
{
"mcpServers": {
"pcap-analyzer": {
"command": "/path/to/pcap-analyzer-mcp",
"args": ["serve"]
}
}
}
```
典型的工作流:为一个抓包文件创建工作区,查看其元数据,
找到感兴趣的会话,然后使用显示过滤器缩小范围。
```
create_workspace(pcap_path, workspace_dir) → workspace_id, sha256, summary
describe_workspace(workspace_id) → packet count, time range, snaplen
list_conversations(workspace_id) → who talked to whom (+ stream index)
query_packets(workspace_id, filter, fields) → rows inline, or a JSONL file
follow_stream(workspace_id, ...) → the bytes on the wire
extract_objects(workspace_id, "http") → files, defanged, hashed
```
### 工具
| 工具 | 功能描述 |
|---|---|
| `get_usage` | 工作区模型、输出契约、错误恢复 |
| `create_workspace` | 打开抓包文件。记录 SHA-256、`capinfos`、tshark 版本 |
| `describe_workspace` | 缓存的抓包元数据 — 不启动容器 |
| `list_workspaces` | 枚举 `workspace_dir` 下的工作区 |
| `delete_workspace` | 删除工作区(支持 `dry_run`) |
| `describe_runtime` | 镜像摘要、tshark 版本、支持的对象协议 |
| `protocol_hierarchy` | 此抓包中包含哪些协议 |
| `list_conversations` | 端点对及其字节计数和流索引 |
| `query_packets` | 显示过滤器 + 字段选择 — 核心工具 |
| `follow_stream` | 重组的流内容,支持范围读取 |
| `extract_objects` | 导出 HTTP / SMB / IMF / TFTP / FTP-DATA / DICOM 对象 |
| `check_job` | 异步运行的进度和结果 |
重型工具接受 `async: true` 并返回一个 `job_id`;可通过 `check_job` 进行轮询。
对大型抓包文件进行全面扫描需要几分钟时间,否则会触发 MCP
客户端的请求超时。
### 处理输出
大型结果将写入为 **JSONL** 格式,可以通过 `head` / `grep` 读取,
也可直接由 DuckDB 加载——如果你需要对数据包表格执行 SQL,
甚至可以通过
[data-toolbox-mcp](https://github.com/nlink-jp/data-toolbox-mcp) 进行加载。缩小范围是本工具的职责;而聚合和
连接则是另一款工具的职责。
每次响应都会报告 `matched`(过滤器匹配到的数据包数量)以及
`returned`,从而让用户清楚地知道过滤器是否需要进一步收紧。
## 处理不受信任的抓包文件
正在调查的抓包文件,顾名思义,是受到攻击者影响的。有两点
值得注意的后果:
- **流内容被包裹**在使用 nonce 标记的标记符中,声明其为数据
而非指令。这是一种缓解措施,而非绝对保证。
- **提取的对象会被“缴械”**:保存为 `.bin`,绝不
可执行,绝不作为内联字节返回。清单中的 SHA-256 通常
足以用于关联威胁情报——你根本无需
触碰该文件。
任何日志级别下,数据负载都不会被写入日志文件。
## 配置
配置是可选的;每个值都有可用的默认值。请参阅
[`config.example.toml`](config.example.toml)。传入 `--config ` 或设置
`PCAP_ANALYZER_MCP_CONFIG`。
## 文档
- [RFP](docs/en/pcap-analyzer-mcp-rfp.md) — 问题陈述、范围和计划
- [架构](docs/en/reference/architecture.md) — 信任边界、数据流和安全模型
- [ADR](docs/en/adr/) — 每一项设计决策及其成本
- [客户端配置](docs/en/reference/client-setup.md) — 注册服务器,以及在其表现异常时的应对方法
- [提示](docs/en/reference/tips.md) — 如何实际进行调查:调查的形态、各协议的过滤方案及常见陷阱
- [实战笔记](docs/en/reference/field-notes.md) — 分析包含真实恶意软件的抓包文件:杀毒软件的干扰、AV 排除项的风险,以及 `ftp-data` 的限制
- [示例抓包](samples/README.md) — 四个合成抓包文件和分级演练
- [第一阶段计划](docs/en/reference/phase1-plan.md) — 任务轨道与开放性问题
## 许可证
MIT
标签:AI代理工具, EVTX分析, MCP服务, NIDS, tshark, 容器化, 日志审计, 时序数据库, 网络协议分析, 防御绕过