wireshark-mcp-win
by slcsec
README.md
# wireshark-mcp-win
基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io) 官方 Python SDK v2 的 Wireshark MCP 服务器(Windows 平台)。将 Wireshark 核心工作流暴露给 AI Agent:实时抓包、离线 pcap 分析、显示过滤器、统计、TCP/UDP 流重组、包导出与 Wireshark GUI 可视化展示。
[English](README.en.md)
## 功能
16 个 MCP 工具,底层封装 tshark / dumpcap / capinfos / editcap / mergecap:
| 工具 | 功能 |
| ------------------------ | ------------------------------------------------------------------------------------------- |
| `list_interfaces` | 列出可抓包网卡 |
| `capture_packets` | 实时抓包(限时/限量/BPF 过滤器),存 pcapng |
| `read_packets` | 读 pcap:显示过滤、字段提取、text/fields/json/hex 输出、翻页、强制解码、TLS 密钥解密 |
| `list_protocol_fields` | 查询协议字段表(进程内缓存) |
| `validate_filter` | 校验显示过滤器语法 |
| `list_streams` | 列出 TCP/UDP 流,含端点、包数与字节数摘要 |
| `follow_stream` | 流重组(ascii/hex,支持显示过滤器限定范围) |
| `get_statistics` | 统计:io / conv / endpoints / phs / http / http_req / expert / hosts / ip_hosts / dns / sip |
| `file_info` | pcap 文件元信息(capinfos) |
| `merge_pcaps` | 多文件合并(mergecap) |
| `edit_pcap` | 编辑:时间截取 / 分块 / 截断 / 去重(editcap) |
| `decode_as` | 强制协议解码(tshark -d) |
| `open_in_wireshark` | 在 Wireshark GUI 中打开 pcap(预置过滤器/跳转包号) |
| `live_display_capture` | 启动 Wireshark GUI 实时抓包展示 |
| `export_packets` | 导出:pcapng/pcap/csv/json/pdml/psml/ek/text |
| `export_objects` | 导出协议对象(http/smb/tftp/icmp/imf 嵌入式文件) |
资源:`wireshark://version`、`wireshark://interfaces`、`wireshark://file/{path}`
提示模板:`analyze_general` / `analyze_http` / `analyze_tls` / `analyze_dns` / `analyze_tcp`
设计要点:
- **上下文安全**:返回结果自动截断(默认 200 KB),大导出落盘只回传摘要与路径
- **路径白名单**:写入类操作(抓包/导出/合并/编辑)限定在工作目录内;读取支持任意路径
- **性能优化**:无过滤器单趟快速路径、翻页范围式过滤、过滤器校验缓存、字段表进程内缓存
## 环境要求
- Windows 10/11(本机已验证 Windows 11)
- 已安装 [Wireshark](https://www.wireshark.org/)(含 tshark/dumpcap/capinfos/editcap/mergecap 与 Npcap 驱动)
- Python 3.10+(开发环境 3.13)
## 安装
```bash
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt
```
## 启动
```bash
# stdio(默认,供 MCP 客户端拉起,如 opencode)
.venv\Scripts\python server.py
# Streamable HTTP 服务
.venv\Scripts\python server.py --transport streamable-http --host 127.0.0.1 --port 8000
# 客户端连接 http://127.0.0.1:8000/mcp
# SSE(旧版 HTTP 传输,兼容老客户端)
.venv\Scripts\python server.py --transport sse --port 8000
```
常用参数(`--help` 查看全部):
| 参数 | 说明 | 默认值 |
| ---------------------- | -------------------------------------------------------- | ---------------------- |
| `--tshark-path` | Wireshark 安装目录(缺省自动发现:注册表/PATH/常见路径) | 自动 |
| `--working-dir` | 抓包输出目录 | `./captures` |
| `--output-dir` | 导出文件目录 | `./captures/exports` |
| `--max-output-bytes` | 单次返回给模型的结果上限,防上下文爆炸 | 200000 |
| `--verbose` | 调试日志 | 关 |
## MCP 客户端配置
### opencode(`opencode.json`)
```json
{
"mcp": {
"wireshark-mcp-win": {
"type": "local",
"command": [
"D:\\path\\to\\wireshark-mcp-win\\.venv\\Scripts\\python.exe",
"D:\\path\\to\\wireshark-mcp-win\\server.py"
],
"enabled": true
}
}
}
```
## 注意事项
- **抓包权限**:实时抓包(`capture_packets` / `live_display_capture`)依赖 Npcap 驱动,非提权进程能否抓包取决于 Npcap 安装时的 ACL 设置(默认仅限管理员)。抓包报权限错误时,请以管理员身份运行本服务。
- **TLS 解密**:`read_packets(keylog_file="...")` 传入 SSLKEYLOGFILE 即可解密 HTTPS 流量。
- **大文件处理**:先用 `edit_pcap`(去重/分块/时间截取)预处理,或用 `read_packets(limit=..., offset=...)` 翻页分析。
## 开发与自测
```bash
# 生成合成测试样本(含完整 TCP/HTTP 流 + DNS + ARP)
.venv\Scripts\python scripts\make_test_pcap.py -o captures\sample_http.pcapng
# 全量功能自测(SDK in-memory 客户端,31 项断言)
.venv\Scripts\python scripts\test_server.py
# GUI 实测(会弹出 Wireshark 窗口)
.venv\Scripts\python scripts\test_gui.py
```
## 目录结构
```
wireshark-mcp-win/
├── server.py # 入口:MCPServer 装配 + argparse + 多传输 run()
├── requirements.txt
├── ws_mcp/
│ ├── tshark.py # CLI 封装:路径自动发现 / 子进程 / 编码 / 超时 / GUI 分离启动
│ ├── tools.py # 16 个 MCP 工具
│ ├── resources.py # 资源
│ ├── prompts.py # 提示模板
│ └── formatter.py # 输出清洗与截断
├── scripts/ # 测试与样本生成脚本
└── captures/ # 抓包与导出文件(默认输出目录)
```
---
*该项目全程由 OpenCode + DeepSeek-V4-Pro-0813 完成
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues