marchana302005-cell/CTI-Dashboard
GitHub: marchana302005-cell/CTI-Dashboard
一个基于 Flask 的网络威胁情报仪表板,聚合 VirusTotal 与 AbuseIPDB 数据源,提供 IP/域名威胁查询、威胁等级分类及历史趋势可视化。
Stars: 0 | Forks: 0
# 🛡️ CTI-Dashboard - 网络威胁情报仪表板
### **项目名称**
CTI-Dashboard - 实时网络威胁情报仪表板
### **目标**
构建一个实时网络威胁情报仪表板,汇集来自开放 CTI 来源的威胁情报。该仪表板允许用户输入 IP 地址或域名,通过 VirusTotal 和 AbuseIPDB 威胁数据库进行检测,对威胁等级进行分类,并利用 MongoDB 存储数据,随时间可视化威胁指标。
### **使用工具**
- **Backend**:Python、Flask Framework
- **Frontend**:HTML、CSS、JavaScript、Chart.js
- **Database**:MongoDB Atlas + PyMongo
- **APIs**:VirusTotal API v3、AbuseIPDB API v2
- **其他**:Requests、python-dotenv、CSV module
### **实施步骤 - 迷你指南**
**a. 从开放 CTI 来源和 API 拉取数据**
在 `app.py` 中使用 `requests` 库调用 VirusTotal `/ip_addresses/{ip}` 和 AbuseIPDB `/check` endpoints。为了安全起见,API keys 从 `.env` 文件中加载。
**b. 展示威胁等级、IOC 和趋势**
IOC = 用户输入的 IP 地址。Backend 根据滥用评分和 VirusTotal 恶意计数计算 `HIGH/MEDIUM/LOW` 威胁等级。结果将展示在仪表板的卡片中。创建了一个 `/trends` 路由,使用 Chart.js 折线图可视化最近 10 次扫描。
**c. 允许用户输入 IP/域名并进行验证**
在 `index.html` 中添加了输入框和扫描按钮。使用 `FormData` 将数据发送到 `/scan` POST 路由。Backend 会验证输入,并根据两个威胁 APIs 对其进行检测。
**d. 随时间可视化威胁指标**
每次扫描都会带有时间戳存储在 MongoDB 的 `scans` 集合中。`/trends` 路由会获取最近的 10 条记录,并将它们绘制在折线图中,其中 X 轴为 IP 的末尾数字,Y 轴为 Abuse Score %。
**e. 添加标签和导出功能**
自动打标签:威胁等级 `HIGH/MEDIUM/LOW` 会被自动分配并存储在 MongoDB 中。
导出:创建了一个 `/export` 路由,用于生成并以 CSV 文件格式下载所有扫描历史记录。
*威胁分析输出* ✅
威胁等级:HIGH 🔴 - 红色徽章
VirusTotal:14 个恶意 / 3 个可疑 / 45 个干净 ✅
AbuseIPDB 评分:100% ✅
总报告数:92 ✅
最后报告时间:2026-06-18 ✅
### **交付成果**
✅ 具备威胁查询功能的实时 CTI 仪表板
✅ 针对 VirusTotal + AbuseIPDB 的 IP/域名验证
✅ 威胁等级分类:HIGH/MEDIUM/LOW
✅ 使用 Chart.js 进行威胁趋势可视化
✅ 用于存储扫描历史的 MongoDB
✅ 将扫描结果导出为 CSV
✅ 深色主题的响应式 Web UI
标签:Flask, MongoDB, Python, 后端开发, 多模态安全, 威胁情报, 开发者工具, 数据可视化, 无后门, 逆向工具