前言

最近在做网络安全,想做一个能实际演示 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

⚠️ 本项目仅供授权环境下的安全研究与教学使用,严禁用于非授权网络。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐