RojanSapkota/osint-terminal
GitHub: RojanSapkota/osint-terminal
一个零依赖的自托管 OSINT 仪表盘,集成了 438 个无需 API 密钥的调查工具,支持批量查询、案例管理和 3D 威胁可视化。
Stars: 27 | Forks: 3
一个自托管的 OSINT 仪表盘,通过单文件 Python 服务器和无依赖的 Web UI 暴露出 438 个无需密钥的调查工具。
每个工具仅依赖于免费的公共数据源 —— 无需 API 密钥,无需账户,无遥测。
## 核心亮点
- **438 个无需密钥的工具**,涵盖网络、域名、电子邮件、身份、电话、图像、加密货币、威胁情报、学术、地理和编码类别。
- **交互式 3D 地球仪**(通过 [globe.gl](https://globe.gl)),带有实时叠加层:地震(USGS)、飞机、C2 基础设施、ISS 位置以及动态攻击弧线。
- **调查工作流** —— 将结果分组到命名案例中,跨相关指标进行透视,并跨多个工具和目标同时运行批量查询。
- **零重度依赖** —— 后端仅需 Python 标准库和 `requests`;前端为纯原生 JavaScript,无需构建步骤。
- **本地优先** —— 历史记录、统计信息、收藏和案例以纯 JSON 形式持久化存储在磁盘上。除了您触发的对外查询外,任何数据都不会离开您的机器。
## 快速开始
要求 **Python 3.10+**。
```
git clone https://github.com/RojanSapkota/OSINT-Terminal.git
cd OSINT-Terminal
pip install -r requirements.txt
python server.py
```
然后打开
。
在 Windows 上,使用 PowerShell 或 `cmd` 执行的命令完全相同;如果您系统中的 Python 是这样注册的,请使用 `py` 代替 `python`。
无需启动服务器即可验证安装:
```
python server.py --selftest
# -> SELFTEST OK (已注册 438 个工具)
```
### 使用 Docker 运行
```
docker build -t osint-terminal .
docker run --rm -p 8080:8080 -v "$(pwd)/data:/app/data" osint-terminal
```
`-v` 挂载会在容器重启之间持久化结果缓存、历史记录和统计信息。使用 `-e PORT=9000 -p 9000:9000` 设置不同的端口。
## 配置说明
服务器会读取两个可选的环境变量:
| 变量 | 默认值 | 用途 |
|-------------|---------|------------------------------------|
| `PORT` | `8080` | 要绑定的 HTTP 端口。 |
| `CACHE_TTL` | `3600` | 结果缓存生存时间(以秒为单位)。 |
```
PORT=9000 CACHE_TTL=600 python server.py
```
每个工具均可在无 API 密钥、账户或 token 的情况下工作 —— 运行前无需进行任何配置。
## 依赖项
| 包 | 是否必需 | 启用功能 |
|-----------------|----------|-------------------------------------------|
| `requests` | 是 | 基于 HTTP 的查询(大多数工具)。 |
| `Pillow` | 可选 | 图像 EXIF / GPS / 感知哈希工具。 |
| `phonenumbers` | 可选 | 更丰富的离线电话号码解析。 |
缺少可选依赖的工具会优雅降级 —— 它们会返回一条解释性消息,而不会报错失败。
## API
该服务器在 `osint.py` 中的工具注册表之上提供了一个轻量级的 JSON API。
| 方法 | 端点 | 描述 |
|---------------|---------------------------------|----------------------------------------------|
| `GET` | `/api/tools` | 工具注册表元数据(标签、接受项、描述) |
| `GET` | `/api/run/?q=` | 运行单个工具并返回其 JSON 结果 |
| `GET`/`POST` | `/api/batch` | 并行运行多个 `{tool, query}` 对 |
| `GET` | `/api/history` | 最近的查询 |
| `DELETE` | `/api/history` | 清除历史记录 |
| `GET` | `/api/stats` | 各工具的使用情况和延迟统计信息 |
| `GET` | `/api/favorites` | 列出 / 添加 / 删除收藏的工具 |
| `GET` | `/api/export?format=csv\|json` | 导出历史记录 |
| `GET` | `/api/cases` | 列出已保存的案例 |
| `GET`/`POST`/`DELETE` | `/api/cases/` | 读取 / 追加至 / 删除案例 |
| `GET` | `/api/health[?force=1]` | 使用已知测试数据对工具进行冒烟测试 |
| `GET` | `/api/threat?q=` | 根据 IOC 黑名单检查 IP/URL/hash |
| `GET` | `/api/threat-feed` | 为地球仪进行地理解析的 C2 节点 |
| `GET` | `/api/cache/stats` | 结果缓存大小和 TTL |
| `GET` | `/api/cache/clear` | 清除结果缓存 |
示例:
```
curl "http://localhost:8080/api/run/dns?q=example.com"
curl "http://localhost:8080/api/run/ipgeo?q=8.8.8.8"
curl -X POST "http://localhost:8080/api/batch" \
-H "Content-Type: application/json" \
-d '{"queries":[{"tool":"dns","query":"example.com"},{"tool":"tls","query":"example.com"}]}'
```
## 工具类别
所有 438 个工具均无需密钥,并按其接受的指标类型进行分组。UI 会自动检测输入类型(IP、域名、电子邮件、电话、坐标、hash 及其他 25+ 种类型),并相应地过滤侧边栏。
| 类别 | 示例工具 |
|-----------------|---------------------------------------------------------------------|
| IP / 网络 | IP 地理定位、ASN/BGP、反向 DNS、端口扫描、Tor 出口节点检查 |
| 域名 / Web | DNS、WHOIS/RDAP、子域名、TLS 证书、安全响应头、技术栈|
| 电子邮件 | MX/SPF/DMARC 姿态、Gravatar、一次性邮箱检测、泄露查询 |
| 身份 | 用户名追踪、GitHub/GitLab、Bluesky、Keybase、HackerNews |
| 电话 | E.164 解析、运营商、区域、时区(离线) |
| 图像 | EXIF、GPS 提取、感知哈希 |
| 加密货币 | BTC/ETH 地址与交易查询、钱包验证 |
| 威胁情报 | IOC 信誉、CVE 详情、MITRE ATT&CK、C2/恶意软件源 |
| 学术 | arXiv、PubMed、DBLP、Wikidata、ORCID |
| 地理 | 反向地理编码、日出日落时间、地震、ISS、航班 |
| 编码 | Base64/32、hex、摩斯密码、ROT-13、Caesar、JWT 解码 |
在运行时通过 `GET /api/tools` 或侧边栏浏览完整注册表。
## 架构
```
index.html Single-page dashboard — vanilla JS/CSS, globe.gl loaded from CDN.
server.py Stdlib ThreadingHTTPServer: routing, caching, persistence, batch pool.
osint.py The tool registry — 438 functions, each query -> dict, keyless sources.
```
- **后端**:`http.server.ThreadingHTTPServer` —— 无需 Flask/Django。响应经过 gzip 压缩;工具目录和静态页面已记忆化并进行了 ETag 缓存。
- **并发**:批量查询和健康检查在 `ThreadPoolExecutor` 上进行分发扇出。
- **持久化**:历史记录、统计信息、收藏夹和结果缓存位于 `data/` 目录下;案例位于 `cases/` 目录下。这两个目录都会在首次运行时创建,并被 git 忽略,因此调查数据永远不会被提交。
请参阅 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) 获取更深入的解析。
## 安全
如需报告漏洞或行为不安全的工具,请参阅
[SECURITY.md](SECURITY.md)。请勿为安全报告开启公开的 issue。
## 许可证
基于 [MIT License](LICENSE) 发布。
### 支持我
[](https://rojansapkota.com.np/wise)
[](https://paypal.me/payrojan)
[](https://ko-fi.com/rojansapkota)
[](https://rojansapkota.com.np/pay)
标签:ESC4, GitHub, OSINT, Python, 威胁情报, 安全仪表盘, 实时处理, 开发者工具, 数据可视化, 无后门, 请求拦截, 逆向工具