0xh1tesh/cyberthreat-visualizer
GitHub: 0xh1tesh/cyberthreat-visualizer
一个融合多源 OSINT 数据并由 AI 驱动分类的全栈实时 3D 网络威胁情报可视化仪表板,帮助安全运营人员直观感知和分析全球攻击态势。
Stars: 2 | Forks: 0
🌐 网络威胁可视化工具
由多源 OSINT API 和 AI 分类驱动的实时 3D 网络威胁情报仪表板
## 📖 描述
网络威胁可视化工具是一个全栈 SOC(安全运营中心)仪表板,它汇集了来自多个 OSINT 源(AbuseIPDB、AlienVault OTX、Shodan 和 IPInfo)的实时威胁情报,并将数据呈现在交互式 3D 地球仪上。传入的威胁事件会通过由 Gemini AI 或 OpenAI 层增强的基于规则的评分引擎,自动分类到相应的攻击类别(DDoS、Malware、Port Scan)中。仪表板的界面包括地球仪上的实时弧线动画、威胁信息流面板、分析级别的详细卡片,以及由 AI 驱动的威胁报告生成器。
## 🛠 技术栈
| 层级 | 技术 |
|---|---|
| 前端框架 | React 18 + Vite 5 |
| 3D 地球仪 | Globe.gl + Three.js |
| 样式 | Tailwind CSS v4 |
| 图表 | Recharts |
| 后端 | Node.js + Express |
| 威胁情报 API | AbuseIPDB, AlienVault OTX, Shodan, IPInfo |
| AI 分类 | Google Gemini AI / OpenAI(可配置) |
| HTTP | node-fetch |
| 环境 | dotenv |
## ✅ 前置条件
- **Node.js** `>= 18.x`([下载](https://nodejs.org/))
- **npm** `>= 9.x`(随 Node.js 一起提供)
- 至少一个威胁情报提供商的 API 密钥(参见下方的[环境变量](#-environment-variables))
## 🚀 安装说明
```
# 克隆 repository
git clone https://github.com/your-username/cyberthreat-visualizer.git
cd cyberthreat-visualizer
# 安装 frontend 依赖
npm install
# 安装 backend 依赖
cd server && npm install && cd ..
# 创建您的 environment 文件
cp server/.env.example server/.env
# 打开 server/.env 并填入您的 API keys
# (参见下方的 Environment Variables 章节)
```
## ▶️ 本地运行
前端和后端是独立的进程,必须在两个终端窗口中**同时**运行。
**终端 1 — 前端(Vite 开发服务器,端口 5173):**
```
npm run dev
```
**终端 2 — 后端(Express API 服务器,端口 5000):**
```
node server/index.js
```
然后在浏览器中打开 [http://localhost:5173](http://localhost:5173)。
## 🔑 环境变量
将 `server/.env.example` 复制到 `server/.env` 并填写以下值。`.env` 文件**永远不会被提交**到版本控制中。
| 变量 | 必填 | 描述 | 获取途径 |
|---|---|---|---|
| `PORT` | 否 | Express 服务器监听的端口(默认:`5000`) | — |
| `ABUSEIPDB_API_KEY` | 推荐 | 通过 AbuseIPDB 进行 IP 信誉查询 | [abuseipdb.com/account/api](https://www.abuseipdb.com/account/api) |
| `IPINFO_API_KEY` | 推荐 | IP 地理位置和 ASN 数据 | [ipinfo.io/account/token](https://ipinfo.io/account/token) |
| `OTX_API_KEY` | 可选 | AlienVault OTX 威胁脉冲(在无密钥的公共模式下也可工作) | [otx.alienvault.com](https://otx.alienvault.com/api) |
| `SHODAN_API_KEY` | 可选 | 暴露的服务和 banner 数据 | [account.shodan.io](https://account.shodan.io) |
| `AI_PROVIDER` | 否 | AI 后端:`auto` \| `gemini` \| `openai` \| `off`(默认:`auto`) | — |
| `GEMINI_API_KEY` | 可选 | Google Gemini 威胁分类和报告生成 | [aistudio.google.com/app/apikey](https://aistudio.google.com/app/apikey) |
| `OPENAI_API_KEY` | 可选 | OpenAI 分类回退 (GPT-4o-mini) | [platform.openai.com/api-keys](https://platform.openai.com/api-keys) |
| `GEMINI_MODEL` | 否 | 要使用的 Gemini 模型(默认:`gemini-2.5-flash`) | — |
| `AI_MODEL` | 否 | 要使用的 OpenAI 模型(默认:`gpt-4o-mini`) | — |
| `AI_CLASSIFIER_TIMEOUT_MS` | 否 | 回退前等待 AI 的最长时间(毫秒)(默认:`800`) | — |
| `AI_REPORT_TIMEOUT_MS` | 否 | 等待 AI 报告生成的最长时间(毫秒);`0` = 无超时 | — |
有关高级 AI 调优参数的完整列表,请参见 `server/.env.example`。
## ✨ 功能
- **多源威胁融合** — 在单个 pipeline 中汇总来自 AbuseIPDB、OTX、Shodan 和 IPInfo 的事件,并进行去重
- **AI 驱动的分类** — Gemini 和/或 OpenAI 将模糊的威胁信号分类为 DDoS、Malware 或 Scan 类别;当 AI 不可用时,回退到基于规则的评分
- **3D 交互式地球仪** — 使用 Globe.gl 和 Three.js 实时渲染动画攻击弧线;点击任意弧线可检查完整的威胁记录
- **SOC 仪表板面板** — 实时威胁信息流、严重性热力图、类别分布图、顶级攻击者表格和国家/地区细分
- **回退链** — 优雅降级:实时 API → 部分数据 → 仿真模式;降级数据在 UI 中会有明确的徽章标记
- **仿真模式** — 完全离线工作,使用逼真的合成数据;无需 API 密钥即可探索 UI
- **AI 报告生成器** — 一键使用 Gemini 汇总活跃威胁的分析师报告
## 🏗 架构概述
```
┌──────────────────────────────────────────────────────────────┐
│ External APIs │
│ AbuseIPDB │ AlienVault OTX │ Shodan │ IPInfo │
└──────────────────────┬───────────────────────────────────────┘
│ HTTP
▼
┌──────────────────────────────────────────────────────────────┐
│ Express Backend (server/index.js) │
│ • Aggregates & deduplicates events │
│ • Rule-based scoring engine │
│ • AI classification layer (Gemini / OpenAI / off) │
│ • REST endpoints: /api/threats /api/report │
└──────────────────────┬───────────────────────────────────────┘
│ JSON over HTTP
▼
┌──────────────────────────────────────────────────────────────┐
│ React Frontend (src/) │
│ • Globe.gl 3D arc visualization │
│ • SOC dashboard panels (Recharts) │
│ • Threat detail drawer & AI report panel │
└──────────────────────────────────────────────────────────────┘
```
## ⚠️ 已知限制
- **API 速率限制** — 免费层级的密钥(尤其是 AbuseIPDB 和 Shodan)施加了严格的速率限制。当达到限制时,受影响的来源将被跳过,并且事件在 UI 中会被标记为 `DEGRADED`。
- **AI 分类需要有效的密钥** — 当设置 `AI_PROVIDER=auto` 且未配置有效的 Gemini 或 OpenAI 密钥时,系统会自动回退到基于规则的评分。不会抛出任何错误,但分类深度会降低。
- **仿真模式使用静态数据** — 当所有实时来源均不可用时,应用会在本地生成合成的威胁事件。这些事件会被明确标记为模拟的,并不代表真实世界的攻击。
- **无身份验证** — Express 后端没有保护其 endpoint 的 API 密钥或身份验证层。不要将其直接暴露在公共互联网上;请在本地运行或置于反向代理之后。
- **单服务器架构** — 后端是一个单 Node.js 进程,没有集群或持久化存储。它没有经过生产环境的强化。
## 📄 许可证
该项目基于 **MIT License** 授权。详情请参阅 [LICENSE](LICENSE)。
标签:3D可视化, AI分类, GNU通用公共许可证, MITM代理, Node.js, React, Syscalls, Web可视化, 威胁情报, 安全运营中心, 开发者工具, 网络映射, 自定义脚本