SalCyberAware/ThreatScan

GitHub: SalCyberAware/ThreatScan

一款免费开源的威胁情报聚合平台,同时查询 11 个安全引擎并实时返回威胁判定结果,可作为 VirusTotal 的自托管替代。

Stars: 0 | Forks: 0

# ⚔ ThreatScan **免费、开源、可自托管的威胁情报平台** 跨 **11 个实时安全引擎** 同时扫描 URL、IP、文件哈希和域名 —— 结果随各引擎响应实时流式传输。 [![Live Demo](https://img.shields.io/badge/Live%20Demo-threat--scan.vercel.app-00ff88?style=for-the-badge&logo=vercel&logoColor=black)](https://threat-scan.vercel.app) [![License: MIT](https://img.shields.io/badge/License-MIT-00ff88?style=for-the-badge)](LICENSE) [![Deploy on Railway](https://img.shields.io/badge/Backend-Railway-blueviolet?style=for-the-badge&logo=railway)](https://railway.app) [![Frontend on Vercel](https://img.shields.io/badge/Frontend-Vercel-black?style=for-the-badge&logo=vercel)](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查询, 免费安全软件, 协议探测, 多引擎聚合, 威胁情报, 安全态势感知, 开发者工具, 开源安全工具, 文件哈希扫描, 无服务器架构, 病毒扫描, 监控系统, 网络安全, 自定义脚本, 自托管, 逆向工程平台, 钓鱼检测, 隐私保护