RojanSapkota/osint-terminal

GitHub: RojanSapkota/osint-terminal

一个零依赖的自托管 OSINT 仪表盘,集成了 438 个无需 API 密钥的调查工具,支持批量查询、案例管理和 3D 威胁可视化。

Stars: 27 | Forks: 3

OSINT Terminal

一个自托管的 OSINT 仪表盘,通过单文件 Python 服务器和无依赖的 Web UI 暴露出 438 个无需密钥的调查工具
每个工具仅依赖于免费的公共数据源 —— 无需 API 密钥,无需账户,无遥测

License: MIT Python 3.10+ Tools: 438 No API keys PRs welcome

OSINT Terminal dashboard

## 核心亮点 - **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) 发布。 ### 支持我 [![Wise](https://img.shields.io/badge/Wise-00B9FF?style=for-the-badge&logo=wise&logoColor=white)](https://rojansapkota.com.np/wise) [![PayPal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://paypal.me/payrojan) [![Ko-Fi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/rojansapkota) [![Website](https://img.shields.io/badge/Website-000000?style=for-the-badge&logo=google-chrome&logoColor=white)](https://rojansapkota.com.np/pay) ![Views Counter](https://views-counter.vercel.app/badge?pageId=rojansapkota-osint-terminal&leftColor=000000&rightColor=0adb3f&type=total&label=Viewers&style=none)
标签:ESC4, GitHub, OSINT, Python, 威胁情报, 安全仪表盘, 实时处理, 开发者工具, 数据可视化, 无后门, 请求拦截, 逆向工具