SentinelClaw:基于 Scapy + FastAPI + DeepSeek 的网络安全攻防Agent平台(开源)
前言
最近在做网络安全,想做一个能实际演示 ARP 攻击与检测原理的系统。市面上要么是纯命令行工具、要么是商业平台,没有一个既能模拟攻击、又能实时检测、还能接 AI 分析的完整演示平台。
于是从零开始写了这个项目:SentinelClaw。
它把"主动攻击模拟"和"被动威胁检测"放在同一个系统里,配合 DeepSeek 大模型做智能分析,形成完整的攻防闭环。前端采用赛博朋克风格的深色 UI,所有数据实时刷新,现在已经整理开源于 GitHub:OliverZ-dot/SentinelClaw
项目概览
核心功能:
- 实时态势感知大屏:1.5 秒轮询,威胁评分实时计算,攻击源 IP 排行、告警等级分布、趋势图表,数据一有变化立即反映
- ARP 攻击构造:支持欺骗、泛洪、扫描、无故 ARP、中间人 5 种攻击,支持自然语言 Agent 执行,内置攻击流程动画可视化
- 威胁检测引擎:基于 Scapy 实时抓包,规则引擎检测 + AI 辅助攻击链重构,一键生成 Markdown 安全报告
- AI 分析中心:DeepSeek 驱动的安全对话助手,支持快捷指令
技术栈:
| 层级 | 技术 |
|---|---|
| 后端 | Python 3.11 · FastAPI · Scapy |
| AI | LangChain · DeepSeek API |
| 前端 | React 18 · Vite · Tailwind CSS |
| 图表 | Recharts |
| 报告渲染 | react-markdown · remark-gfm |
运行环境:Windows 11 + WSL2 (Ubuntu 22.04),实时抓包功能需在 WSL 内以 root 运行后端。
架构设计
SentinelClaw/
├── backend/
│ ├── core/ # Scapy 抓包、ARP 构造、规则检测引擎
│ ├── agents/ # LangChain + DeepSeek Agent
│ ├── routers/ # REST API 路由(/api/arp /api/detect /api/ai /api/dashboard)
│ └── main.py
├── frontend/
│ └── src/
│ ├── pages/ # Dashboard · ARPForge · ThreatDetector · AICenter
│ └── components/
├── data/
│ ├── samples/ # 示例 PCAP 文件
│ └── logs/
└── requirements.txt
前后端通过 REST API 通信,前端 Vite 代理到后端 8000 端口,开发体验流畅。
核心模块实现思路
1. ARP 攻击模拟(Scapy)
ARP 协议本身没有认证机制,这是它被攻击的根本原因。项目基于 Scapy 实现了五种攻击模式:
- ARP 欺骗:伪造 ARP 响应,让目标主机将攻击者 MAC 当作网关 MAC 缓存,从而劫持流量
- ARP 泛洪:向网络发送大量伪造 ARP 包,消耗交换机 CAM 表资源,导致广播风暴
- ARP 扫描:利用 ARP 请求遍历网段,探测存活主机(比 ICMP 扫描更难被过滤)
- 无故 ARP:主动广播自己的 IP-MAC 映射,可用于更新网络中所有主机的 ARP 缓存
- 中间人 MITM:同时欺骗通信双方,将自己插入通信链路,实现流量监听与篡改
这些操作后端对外暴露统一的 /api/arp 接口,前端通过 Agent 调用。
2. 实时威胁检测
检测引擎基于 Scapy 的 AsyncSniffer 实时抓包,维护一个滑动窗口统计各类 ARP 行为:
- 短时间内同一 IP 发出的 ARP 响应数量过多 → 判定为欺骗
- 广播请求频率超过阈值 → 判定为泛洪
- 同一 MAC 对应多个 IP 出现 → 判定为 MITM
告警通过 SSE 或轮询推送给前端,Dashboard 每 1.5 秒拉取一次最新数据,保证准实时响应。
3. DeepSeek Agent(LangChain)
AI 模块基于 LangChain 的 Tool Calling 机制,给模型注册了以下工具:
get_alerts:获取当前所有告警get_attack_history:获取攻击历史记录reconstruct_chain:根据告警序列重构攻击链generate_report:生成结构化安全报告
用户在 AI 分析中心输入自然语言,模型自动判断调用哪些工具,再综合结果给出分析结论。攻击链重构的输出会被 react-markdown + remark-gfm 渲染成带表格的 HTML,不再是原始 Markdown 字符串。
4. 前端实时大屏
Dashboard 使用 useEffect + setInterval 以 1500ms 为周期轮询 /api/dashboard 接口。为了让"刚发生的攻击"快速体现在趋势图上,时间轴以 30 秒为一个 bucket 分组,保留最近 12 个 bucket(6 分钟历史),新攻击在 30 秒内就会在折线图上显现。
数值有变化时触发 CSS @keyframes statUpdate 动画(缩放 + 颜色闪烁),给操作者视觉反馈,避免盯着数字不知道它是否刷新。
踩坑记录
1. marked 库在新版本里返回 Promise
最开始用 marked.parse(report) 直接注入 dangerouslySetInnerHTML,结果页面显示 [object Promise]。marked 17.x 把 parse 改成了异步。解决方案:直接换成 react-markdown + remark-gfm,一行代码搞定,还顺手解决了表格不渲染的问题(remark-gfm 支持 GFM 表格语法)。
2. Tailwind preflight 把自定义 Markdown 样式重置了
.report-markdown h1 的 font-size 被 Tailwind 的 @tailwind base 层重置成和正文一样大。解决方法:把 .report-markdown 的所有样式移到 index.css 的 @layer 之外(放在 @tailwind utilities 后面),关键属性加 !important,这样优先级高于 preflight。
3. WSL2 下 Scapy 抓包权限问题
直接 uvicorn main:app 启动时,Scapy 的 AsyncSniffer 没有权限打开网卡。需要 sudo $(which uvicorn) main:app --host 0.0.0.0 --port 8000,用 which uvicorn 获取虚拟环境里的 uvicorn 路径,避免 sudo 切换到系统 Python 找不到依赖。
快速体验
# 克隆
git clone https://github.com/OliverZ-dot/SentinelClaw.git
cd SentinelClaw
# 后端(WSL 中)
python3.11 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # 填入 DEEPSEEK_API_KEY
cd backend && uvicorn main:app --reload --host 0.0.0.0 --port 8000
# 前端(新开终端)
cd frontend && npm install && npm run dev
# 访问 http://localhost:5173
结语
这个项目算是把我这学期学到的东西做了一次综合实践:网络协议层的操作、后端 API 设计、前端实时数据可视化、大模型工具调用。每一块单独看都不难,但把它们串成一个完整系统还是花了不少时间。
目前功能已经比较完整,感兴趣的可以去 GitHub 看看,欢迎 Star、提 Issue 或者 PR。
GitHub:OliverZ-dot/SentinelClaw
⚠️ 本项目仅供授权环境下的安全研究与教学使用,严禁用于非授权网络。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)