SalCyberAware/ThreatScan
GitHub: SalCyberAware/ThreatScan
一款免费开源的威胁情报聚合平台,同时查询 11 个安全引擎并实时返回威胁判定结果,可作为 VirusTotal 的自托管替代。
Stars: 0 | Forks: 0
# ⚔ ThreatScan
**免费、开源、可自托管的威胁情报平台**
跨 **11 个实时安全引擎** 同时扫描 URL、IP、文件哈希和域名 —— 结果随各引擎响应实时流式传输。
[](https://threat-scan.vercel.app)
[](LICENSE)
[](https://railway.app)
[](https://vercel.com)
## 什么是 ThreatScan?
ThreatScan 是 VirusTotal 的免费开源替代品。与将数据发送到单一引擎不同,ThreatScan **同时查询 11 个威胁情报 API** 并逐个引擎流式传输结果 —— 因此您无需等待所有引擎完成即可立即查看数据。
**隐私至上:** API 密钥存储在服务端。ThreatScan 不记录任何日志且没有数据库。文件绝不会被上传 —— 仅扫描其 SHA256 哈希值。
## 功能特性
- ⚡ **实时流式结果** —— Server-Sent Events 在每个引擎结果到达时进行流式传输
- 🔬 **11 个引擎** —— VirusTotal, AbuseIPDB, URLScan, MalwareBazaar, AlienVault OTX, GreyNoise, IPInfo, PhishTank, Google SafeBrowse, ThreatFox, WHOIS/DNS
- 📁 **文件上传** —— 拖放任意文件,在本地使用 SHA256 进行哈希处理(文件不会离开您的设备)
- ⚡ **批量扫描** —— 粘贴多达 20 个 URL、IP 或域名并一次性全部扫描,支持 CSV 导出
- 🌍 **WHOIS + DNS** —— 任意域名的注册商、创建日期、过期时间、A/MX/NS 记录
- 📸 **URLScan 截图** —— 已扫描页面的内嵌截图预览
- 📊 **加权威胁评分** —— 0–100 分,根据引擎信誉加权(VirusTotal 的权重高于单一来源引擎)
- 🔥 **热门威胁** —— 按威胁评分排序的扫描历史记录
- 📥 **导出** —— 将单次扫描结果下载为 JSON 或批量结果下载为 CSV
- 🕐 **5 分钟缓存** —— 重复扫描即时返回,不会触发 API 限制
- 📱 **移动端响应式** —— 适配所有屏幕尺寸
- 🔒 **速率限制** —— 每个 IP 每 15 分钟 60 次扫描
- 🚀 **CI/CD** —— 每次推送到 main 分支时自动部署
## 在线演示
**[https://threat-scan.vercel.app](https://threat-scan.vercel.app)**
## 引擎
| 引擎 | 支持 | 免费层 | 需要 Key |
|--------|----------|-----------|--------------|
| VirusTotal | URL, IP, Domain, Hash | 500/天 | ✅ |
| AbuseIPDB | IP | 1,000/天 | ✅ |
| URLScan.io | URL, Domain | 1,000/天 | ✅ |
| MalwareBazaar | Hash | 无限 | ❌ |
| AlienVault OTX | All | 无限 | ✅ |
| GreyNoise | IP | 1,000/天 | ✅ |
| IPInfo | IP | 50,000/月 | ✅ |
| URLhaus (abuse.ch) | URL, Domain, Hash | 无限 | ❌ |
| Google SafeBrowse | URL, Domain | 10,000/天 | ✅ |
| ThreatFox | All | 无限 | ❌ |
| WHOIS / DNS | URL, Domain | 无限 | ❌ |
## 快速开始 (本地)
```
# 1. 克隆 repo
git clone https://github.com/SalCyberAware/ThreatScan.git
cd ThreatScan
# 2. 安装 backend 依赖项
cd backend && npm install
# 3. 创建你的 .env 文件
cp .env.example .env
# 添加你的 API keys(参见下方的 API Keys 部分)
# 4. 启动 backend
node server.js
# 5. 在新的 terminal 中,安装并启动 frontend
cd ../frontend && npm install && npm run dev
```
打开 [http://localhost:5173](http://localhost:5173)
## API Keys
所有 Key 均免费。在此获取:
| Key | 获取地址 |
|-----|----------------|
| `VT_API_KEY` | [virustotal.com](https://virustotal.com) → 注册 → API Key |
| `ABUSEIPDB_KEY` | [abuseipdb.com](https://abuseipdb.com) → 账户 → API |
| `URLSCAN_KEY` | [urlscan.io](https://urlscan.io) → 个人资料 → API Key |
| `OTX_KEY` | [otx.alienvault.com](https://otx.alienvault.com) → 设置 → OTX Key |
| `GREYNOISE_KEY` | [greynoise.io](https://greynoise.io) → 账户 → API |
| `IPINFO_KEY` | [ipinfo.io](https://ipinfo.io) → Token |
| `PHISHTANK_KEY` | [phishtank.org](https://phishtank.org) → 注册 |
| `GSB_KEY` | [console.cloud.google.com](https://console.cloud.google.com) → Safe Browsing API |
## 部署您自己的实例
### 后端 → Railway
1. Fork 本仓库
2. 前往 [railway.app](https://railway.app) → 新建项目 → 从 GitHub 部署
3. 选择 `ThreatScan` → 将 **Root Directory** 设置为 `backend`
4. 将所有 API Key 添加为环境变量
5. 设置 `PORT=4000`
### 前端 → Vercel
1. 前往 [vercel.com](https://vercel.com) → 新建项目 → 从 GitHub 导入
2. 将 **Root Directory** 设置为 `frontend`
3. 添加环境变量:`VITE_API_URL=https://your-railway-url.up.railway.app/api`
4. 部署
## 架构
```
User Browser
│
▼
Vercel (React + Vite) Railway (Node.js + Express)
threat-scan.vercel.app → Port 4000
│ │
│ Server-Sent Events │
│◄─────────────────────────────│
│
┌───────────┴────────────┐
│ 11 Engine Modules │
│ virustotal.js │
│ abuseipdb.js │
│ urlscan.js │
│ malwarebazaar.js │
│ otx.js │
│ greynoise.js │
│ ipinfo.js │
│ phishtank.js │
│ safebrowsing.js │
│ threatfox.js │
│ whois.js │
└────────────────────────┘
```
## 添加新引擎
1. 创建 `backend/engines/yourengine.js` 并导出 `scanUrl`, `scanIp`, `scanHash`, `scanDomain`
2. 在 `backend/server.js` 中的 `engines`, `ENGINE_KEYS`, `ENGINE_TIMEOUTS`, `ENGINE_WEIGHTS` 下注册它
3. 在 `frontend/src/App.jsx` 的 `ENGINE_META` 中添加名称和图标
```
// backend/engines/yourengine.js
async function scanUrl(url) {
// call your API
return { verdict: "clean" | "suspicious" | "malicious" | "info", detail: "..." };
}
module.exports = { scanUrl, scanIp, scanHash, scanDomain };
```
## 技术栈
- **Frontend:** React, Vite, Server-Sent Events
- **Backend:** Node.js, Express
- **Deployment:** Vercel (frontend), Railway (backend)
- **Security:** Helmet.js, CORS, rate limiting, no logging
## 贡献
欢迎提交 Pull Request。如有重大更改,请先开 issue 讨论。
1. Fork 本仓库
2. 创建功能分支:`git checkout -b feature/new-engine`
3. 提交您的更改
4. 发起 Pull Request
## 许可证
MIT —— 可免费使用、修改和自托管。
由 [SalCyberAware](https://github.com/SalCyberAware) ⚔ 制作
**[在线演示](https://threat-scan.vercel.app) · [报告 Bug](https://github.com/SalCyberAware/ThreatScan/issues) · [请求功能](https://github.com/SalCyberAware/ThreatScan/issues)**
标签:AbuseIPDB, DNS记录, Google Safe Browsing, GreyNoise, IP信誉检测, MITM代理, PhishTank, Server-Sent Events, SHA256计算, SSE, Threat Intelligence, URL扫描, VirusTotal替代, WHOIS查询, 免费安全软件, 协议探测, 多引擎聚合, 威胁情报, 安全态势感知, 开发者工具, 开源安全工具, 文件哈希扫描, 无服务器架构, 病毒扫描, 监控系统, 网络安全, 自定义脚本, 自托管, 逆向工程平台, 钓鱼检测, 隐私保护