vom00/feedlock
GitHub: vom00/feedlock
FEEDLOCK 是一个威胁情报源聚合查询工具,通过并行查询多个情报源并对结果进行标准化加权,为输入的 IP、域名或文件哈希给出统一的威胁等级判定。
Stars: 0 | Forks: 0
# FEEDLOCK — 威胁情报源聚合器
输入 IP 地址、域名或文件哈希。FEEDLOCK 会并行查询 AbuseIPDB、AlienVault OTX、VirusTotal(以及可选的 Shodan),将每个响应标准化为统一的 schema,并通过每个来源的明细渲染出加权置信度得分。
## 架构
```
┌──────────────┐ POST /api/lookup ┌──────────────────┐
│ React client │ ────────────────────► │ Express proxy │
│ (Vite, :5173)│ ◄──────────────────── │ (:3001) │
└──────────────┘ ThreatReport └────────┬─────────┘
│ Promise.allSettled (parallel)
┌──────────────┬──────┴───────┬──────────────┐
▼ ▼ ▼ ▼
AbuseIPDB AlienVault OTX VirusTotal Shodan
(IP only) (ip/domain/hash) (ip/domain/hash) (IP, optional)
│ │ │ │
└──────► normalize → SourceResult ◄──────────┘
│
weighted score (re-normalized when
a source errors) → ThreatLevel verdict
```
API 密钥仅保留在服务器上 —— 浏览器永远不会直接与威胁情报 API 通信。
## 设置
```
git clone
cd "microsoft major project"
# 1. 安装两个 packages
cd client && npm install && cd ..
cd server && npm install && cd ..
# 2. 配置 keys
cp .env.example server/.env # then paste your keys into server/.env
# 3. 运行(两个 terminals)
cd server && npm run dev # API on http://localhost:3001
cd client && npm run dev # UI on http://localhost:5173
```
Vite 开发服务器会将 `/api/*` 代理到 `localhost:3001`,因此只需打开
http://localhost:5173 即可。
## 获取免费 API 密钥
| 来源 | 注册地址 | 备注 |
|--------|-------------|-------|
| AbuseIPDB | https://www.abuseipdb.com/register | 免费层级:每天 1,000 次查询 |
| AlienVault OTX | https://otx.alienvault.com/ | 密钥位于 Settings → API Integration |
| VirusTotal | https://www.virustotal.com/gui/join-us | 免费层级:每分钟 4 次请求 |
| Shodan(可选) | https://account.shodan.io/register | 没有它应用也能正常运行 |
## 运行测试
```
cd client && npm test # Vitest + React Testing Library (77 tests)
cd server && npm test # Jest + Supertest (26 tests)
```
所有功能均采用测试优先原则构建:validator、scorer、normalizers、services、route、hook 以及所有 UI 组件在实现之前均先经过未通过测试。
## 评分
每个来源的响应都会被标准化至 0–100,然后结合以下权重进行计算:
AbuseIPDB 0.35 · VirusTotal 0.35 · OTX 0.25 · Shodan 0.05。出错的来源将被
排除,剩余的权重将重新标准化。判定区间:
0–25 干净 · 26–50 可疑 · 51+ 恶意。
## 部署 (Render)
在生产环境中,Express 从同一个源提供已构建的客户端和 API ——
无需进行 CORS 或 API-base 配置。
最简单的方法 —— 该仓库附带了一个 [render.yaml](render.yaml) 蓝图:
1. 在 [Render](https://render.com) 上:**New → Blueprint**,连接此仓库。
2. Render 会读取 `render.yaml` 并提示输入 API 密钥
(`ABUSEIPDB_API_KEY`、`OTX_API_KEY`、`VT_API_KEY`;`SHODAN_API_KEY` 为
可选项)。Render 会自动设置 `PORT`。
手动备选方案:**New → Web Service**,构建命令使用 `npm run build`,
启动命令使用 `npm start`,然后在控制台中添加相同的环境变量。
注意:Render 的免费层级在闲置约 15 分钟后会休眠 —— 在现场演示前一分钟
打开 URL 将其唤醒。
## 已知限制
- **VirusTotal 免费层级**允许每分钟 4 次请求 —— 每个 IOC 的结果会在
内存中缓存 10 分钟;当出现 429 错误时,该来源卡片会显示 "Rate limited",
而其他来源仍会正常报告。
- **不支持 IPv6** —— AbuseIPDB v2 免费层级不支持该格式。
- **私有/保留 IP 会被拒绝**并附带说明信息
(RFC 1918、loopback、link-local、CGNAT 等)—— 公共威胁情报源没有
这些范围的数据,且 OTX 会直接拒绝它们。
- **历史记录仅在当前会话有效** —— 刷新页面会清空记录(最多 50 条)。
- 内存缓存在服务器重启时会重置;没有持久化层。
## 演示 IOC(公开记录,可安全查询)
| IOC | 类型 | 预期结果 |
|-----|------|----------|
| `185.220.101.1` | IP | 高分 —— 已知的 Tor 出口节点 |
| `malware-traffic-analysis.net` | Domain | 存在多个 OTX pulse |
| `44d88612fea8a8f36de82e1278abb02f` | Hash | EICAR 测试文件 MD5 —— 被 VT 标记 |
## 扩展想法
- 当受监控 IOC 的得分发生变化时提供实时 WebSocket 更新
- 使用 PostgreSQL 持久化存储,以实现跨会话的历史记录和趋势图表
- 引入用户认证,提供按分析师保存的监控列表
- 接入更多情报源:URLhaus、GreyNoise、IPQualityScore
标签:API聚合, Express, React, Syscalls, 威胁情报, 安全运营, 开发者工具, 扫描框架, 数据可视化, 自动化攻击