数据包分析器 MCP
这是一个用于捕获和分析网络数据包的MCP(模型上下文协议)服务器系统。它采用客户端-服务器架构,能够从多个主机收集数据包,并在中央进行分析。
概述
该项目是一个用于网络监控和分析的分布式系统:
- 客户端在每个主机上使用tcpdump捕获数据包并传输到Kafka
- 服务器在Kafka中收集数据包,存储到PostgreSQL后,通过外部安全API进行分析
- RAG系统将脆弱IP信息存储在向量数据库中,并通过语义搜索进行匹配
系统架构
┌─────────────────┐
│ Client 1 │──┐
│ (Host A) │ │
└─────────────────┘ │
│
┌─────────────────┐ │ ┌─────────────────┐ ┌──────────────────┐
│ Client 2 │──┼────▶│ Kafka │────▶│ Server │
│ (Host B) │ │ │ Message Queue │ │ - Packet Store │
└─────────────────┘ │ └─────────────────┘ │ - Analyzer │
│ │ - RAG System │
┌─────────────────┐ │ └──────────────────┘
│ Client N │──┘ │
│ (Host N) │ ▼
└─────────────────┘ ┌──────────────────┐
│ PostgreSQL │
│ + pgvector │
│ Database │
└──────────────────┘
│
▼
┌──────────────────┐
│ External APIs │
│ - NVD CVE │
│ - MITRE ATT&CK │
│ - AbuseIPDB │
└──────────────────┘主要功能
客户端(数据包捕获)
- 使用tcpdump进行实时数据包捕获
- 使用Scapy进行数据包解析(TCP、UDP、ICMP)
- 支持BPF过滤器
- pcap文件解析及传输
- 通过Kafka进行批量传输
- 支持多种网络接口
服务器(数据包分析)
- 使用Kafka消费者收集数据包
- 在PostgreSQL + pgvector中存储和索引向量数据
- 外部安全API集成
- NVD CVE 数据库搜索 - MITRE ATT&CK框架映射 - AbuseIPDB威胁情报
- 自动数据包分析
- 恶意IP检测 - 端口扫描检测 - 检测到不安全协议 - 异常流量检测
- 基于RAG的脆弱IP管理
- 通过向量嵌入的语义搜索 - 构建脆弱IP数据库 - 实时数据包-威胁匹配
- 统计与报告
- 协议分布 - 最活跃的发言者 - 威胁概述
安装
1. 项目克隆
git clone
cd packet-analyzer-mcp2. 安装Python包
使用UV的情况:
uv sync或者,如果使用pip:
pip install -e .3. 基础设施设置
PostgreSQL的安装与配置
# Ubuntu/Debian
sudo apt-get install postgresql postgresql-contrib
# macOS
brew install postgresql
brew services start postgresql
# 데이터베이스 생성
sudo -u postgres psql
CREATE DATABASE packet_analyzer;
CREATE USER packet_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE packet_analyzer TO packet_user;
\qRabbitMQ的安装与配置
# Ubuntu/Debian
sudo apt-get install rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
# macOS
brew install rabbitmq
brew services start rabbitmq
# 웹 관리 콘솔 활성화 (선택사항)
sudo rabbitmq-plugins enable rabbitmq_management
# http://localhost:15672 (guest/guest)4. 设置环境变量
服务器设置(server/.env)
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=packet_analyzer
POSTGRES_USER=packet_user
POSTGRES_PASSWORD=your_password
RABBITMQ_HOST=localhost
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_QUEUE=packet_queue
# 선택사항: 외부 API 키
NVD_API_KEY=your_nvd_api_key
ABUSEIPDB_API_KEY=your_abuseipdb_api_key客户端设置 (client/.env)
RABBITMQ_HOST=your_server_ip
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_QUEUE=packet_queue
CLIENT_ID=laptop-01使用方法
服务器运行
python -m server.server客户端运行
python -m client.client与Claude Desktop集成
Claude Desktop 设置文件(claude_desktop_config.json)中添加:
{
"mcpServers": {
"packet-analyzer-server": {
"command": "python",
"args": ["-m", "server.server"],
"cwd": "/path/to/packet-analyzer-mcp",
"env": {
"POSTGRES_HOST": "localhost",
"POSTGRES_DB": "packet_analyzer",
"POSTGRES_USER": "packet_user",
"POSTGRES_PASSWORD": "your_password",
"RABBITMQ_HOST": "localhost"
}
},
"packet-analyzer-client": {
"command": "python",
"args": ["-m", "client.client"],
"cwd": "/path/to/packet-analyzer-mcp",
"env": {
"RABBITMQ_HOST": "localhost",
"CLIENT_ID": "my-laptop"
}
}
}
}使用示例
客户端使用示例
사용 가능한 네트워크 인터페이스를 보여줘
→ list_interfaces 도구 실행
eth0 인터페이스에서 HTTP 트래픽 100개를 캡처해서 서버로 전송해줘
→ capture_and_send 도구 실행 (interface: eth0, filter: "tcp port 80", packet_count: 100)
/home/user/capture.pcap 파일을 분석을 위해 서버로 전송해줘
→ send_pcap_file 도구 실행服务器使用示例
최근 1시간 동안의 패킷을 분석해줘
→ analyze_packets 도구 실행
192.168.1.100 IP의 위협 정보를 알려줘
→ query_threats 도구 실행
오늘 패킷 통계를 보여줘 (프로토콜 분포, Top Talkers)
→ get_statistics 도구 실행
SMB 취약점을 검색해줘
→ search_cve 도구 실행 (keyword: "SMB")
포트 스캔 관련 MITRE ATT&CK 기법을 알려줘
→ check_mitre_technique 도구 실행 (keyword: "port scanning")
최근 HIGH 심각도 위협 목록을 보여줘
→ get_recent_threats 도구 실행 (severity: "HIGH")安全考虑事项
权限管理
- 捕获数据包需要管理员权限
- 遵循最小权限原则
- 在生产环境中,请使用专用用户帐户
数据安全
- 捕获的数据包中可能包含敏感信息
- 实现对存储数据的访问控制
- 定期删除不必要的数据
- 考虑对数据库进行加密
网络安全
- 限制对RabbitMQ和PostgreSQL的访问
- 使用TLS/SSL来加密通信
- 请适当配置防火墙规则
遵守事项
- 遵守组织的安全政策
- 请确认法律要求(例如:GDPR,HIPAA)
- 在进行数据包捕获之前,请获得适当的批准
技术栈
| 组成部分 | 技术 |
|---|---|
| 语言 | Python 3.11+ |
| MCP SDK | mcp |
| 数据库 | PostgreSQL 12+ |
| 消息队列 | RabbitMQ 3.8+ |
| 数据包捕获 | tcpdump, Scapy |
| 外部API | NVD CVE, MITRE ATT&CK, AbuseIPDB |
| 包管理 | uv |
项目结构
packet-analyzer-mcp/
├── server/ # 서버 패키지
│ ├── __init__.py
│ ├── server.py # MCP 서버
│ ├── database.py # PostgreSQL 연결
│ ├── message_queue.py # RabbitMQ 컨슈머
│ ├── analyzers.py # 패킷 분석 로직
│ ├── external_apis.py # 외부 API 클라이언트
│ └── README.md # 서버 문서
├── client/ # 클라이언트 패키지
│ ├── __init__.py
│ ├── client.py # MCP 클라이언트
│ ├── packet_capture.py # tcpdump 래퍼
│ ├── message_queue.py # RabbitMQ 프로듀서
│ └── README.md # 클라이언트 문서
├── pyproject.toml # 프로젝트 설정
├── main.py # 기존 엔트리 포인트
└── README.md # 이 파일解决问题
常见问题
- 权限被拒绝(tcpdump)
- 确认sudo权限 - 使用setcap授予权限: sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
- RabbitMQ连接失败
- 服务状态检查: sudo systemctl status rabbitmq-server - 端口检查: sudo netstat -tlnp | grep 5672 - 检查防火墙规则
- PostgreSQL连接失败
- 服务状态检查: sudo systemctl status postgresql - 验证设置确认: /etc/postgresql/.../pg_hba.conf - 数据库及用户验证
- 数据包未被捕获
- 确认网络流量存在 - 验证BPF过滤器语法 - 确认接口名称: ip link show
调试
# RabbitMQ 큐 상태 확인
sudo rabbitmqctl list_queues
# PostgreSQL 연결 테스트
psql -h localhost -U packet_user -d packet_analyzer
# 패킷 캡처 테스트
sudo tcpdump -i any -c 10
# Python 모듈 테스트
python -c "import mcp, asyncpg, pika, scapy.all"性能优化
数据库
- 确认索引是否已正确创建
- 定期执行VACUUM操作
- 旧数据应归档或删除
RabbitMQ
- 消息大小优化
- 使用批量传输
- 适当的QoS设置
数据包捕获
- 使用BPF过滤器排除不需要的数据包
- 数据包数量限制
- 有效载荷大小限制
