dmitryflynn/opensint
GitHub: dmitryflynn/opensint
OpenSINT 是一个开源且可自托管的情报收集工作台,通过聚合多源公共数据,帮助用户一站式完成域名、IP、邮箱、用户名等实体的情报查询与可视化调查。
Stars: 0 | Forks: 0
# 🛰 OpenSINT
**一个开源、可自托管的情报收集工作台。**
将域名、IP、电子邮件、用户名和文件/哈希情报统一在一个控制台中 —— 然后将你发现的线索映射到可视化的调查图谱上。永久免费,基于 MIT 许可证,无需账户。
## 为什么需要
专业的 OSINT 平台将十几种查询功能藏在付费墙后。OpenSINT 是该工作流的免费开源替代实现,由你自己运行。大多数模块在**零配置**下即可使用公共数据源运行;可选的 API key 可以解锁更丰富的结果。
## 功能
| 模块 | 功能说明 | 无需 key 可用? |
| --- | --- | --- |
| **通用搜索** | 自动检测任何输入的实体类型,并将其路由到正确的模块 | ✅ |
| **域名情报** | WHOIS 注册信息、实时 DNS (A/AAAA/MX/NS/TXT/CNAME/SOA/CAA)、TLS 证书、通过证书透明度 (Certificate Transparency) 获取被动子域名 | ✅ |
| **IP 情报** | 地理位置、ASN/ISP 归属、滥用信誉、暴露的端口与服务 | ✅ 地理 · 🔑 信誉/端口 |
| **电子邮件情报** | Gravatar 配置文件 + 关联账户、泄露暴露 | ✅ gravatar · 🔑 泄露 |
| **用户名搜索** | 在 120 多个平台(社交、开发、游戏、安全、创意、商务)枚举用户名 | ✅ |
| **文件与哈希分析** | 跨 70 多个防病毒引擎查询 MD5/SHA-1/SHA-256 的信誉,或直接上传文件 | 🔑 VirusTotal |
| **密码泄露** | 基于数以十亿计的泄露密码进行 k-anonymity 检查(仅返回计数) | ✅ |
| **调查面板** | 从任何模块固定实体,并将它们链接成可保存、可共享的图谱 | ✅ |
`✅ = 免费/公共来源` · `🔑 = 需要可选的 API key 以获取完整结果`
## 快速开始
```
git clone https://github.com/
/opensint.git
cd opensint
npm install # installs root, server, and web dependencies
npm run dev # API on :4000, UI on :5173 (hot reload)
```
打开 **http://localhost:5173**。
### 生产环境(单端口)
```
npm run build # builds the React app into web/dist
npm start # Express serves the API + the built UI on :4000
```
打开 **http://localhost:4000**。
## 配置
每个模块默认在免费/公共来源上运行。要解锁可选的集成功能,请复制示例环境文件并添加你需要的 key:
```
cp .env.example .env
```
| 变量 | 解锁功能 | 获取 key |
| --- | --- | --- |
| `HIBP_API_KEY` | 邮箱密码泄露暴露 | |
| `VIRUSTOTAL_API_KEY` | 文件与哈希信誉 | |
| `ABUSEIPDB_API_KEY` | IP 滥用信誉 | |
| `SHODAN_API_KEY` | IP 开放端口与服务 | |
| `IPINFO_TOKEN` | 更丰富的 IP 地理位置 | |
编辑 `.env` 后重启服务器。侧边栏会显示哪些集成已生效。
## 架构
```
opensint/
├── server/ Node + Express API (ES modules, dependency-light)
│ ├── index.js App bootstrap; serves web/dist in production
│ ├── routes.js REST endpoints, one per module
│ ├── config.js Env + integration status
│ └── services/ One file per data source
│ ├── detect.js identifier type detection
│ ├── dns.js whois.js ssl.js subdomains.js
│ ├── ipinfo.js geo + AbuseIPDB + Shodan
│ ├── email.js breach.js gravatar + HIBP + Pwned Passwords
│ ├── username.js multi-platform enumeration
│ ├── virustotal.js file/hash reputation
│ └── store.js flat-file investigation persistence
└── web/ React + Vite single-page app
└── src/pages/ Dashboard, per-module pages, graph board
```
- **无数据库。** 调查面板以单个 JSON 文件持久化存储(`server/data/`),使得自托管变得非常简单。
- **优雅降级。** 每个服务都隔离自身的故障 —— 单个上游服务的失效永远不会拖垮整个查询,并且缺失的 key 会返回有用的提示信息而不是直接报错。
- **全面的超时机制。** 没有响应缓慢的提供商能挂起请求。
## API
所有 endpoint 都位于 `/api` 下,并返回 `{ ok, data }` 或 `{ ok: false, error }`。
| 方法 | Endpoint | 说明 |
| --- | --- | --- |
| `GET` | `/api/detect?q=` | 识别实体类型 |
| `GET` | `/api/domain?domain=` | 完整的域名报告(或 `/dns`, `/whois`, `/ssl`, `/subdomains`) |
| `GET` | `/api/ip?ip=` | IP 情报 |
| `GET` | `/api/email?email=` | 电子邮件情报 |
| `GET` | `/api/username?username=` | 用户名枚举 |
| `GET` | `/api/hash?hash=` | 哈希信誉 |
| `POST` | `/api/file/scan` | 原始文件主体 → VirusTotal |
| `POST` | `/api/password/check` | k-anonymity 密码泄露检查 |
| `GET/POST/DELETE` | `/api/investigations` | 调查面板的 CRUD 操作 |
## 技术
Node 18+ · Express · React 18 · React Router · Vite。无付费服务,无遥测。
## 贡献
欢迎提交 Issue 和 PR —— 新的用户名平台、额外的数据源以及 UI 优化都是很好的首次贡献。请保持新增内容仅限于**公共/防御性**来源,以符合项目的范围。
## 许可证
[MIT](LICENSE)。不隶属于任何商业 OSINT 提供商。标签:GitHub, MITM代理, 图分析, 威胁情报, 安全调查, 实时处理, 开发者工具, 数据泄露, 自定义脚本