0xCatmeat/osint-recon

GitHub: 0xCatmeat/osint-recon

一款命令行 OSINT 调查工具,能够对域名、IP、URL、哈希或 EVM 地址自动聚合多源情报数据并生成可追溯的标准化报告。

Stars: 0 | Forks: 0

# osint-recon 一款命令行 OSINT 工具,能够同时从多个数据源拉取目标证据,将所有内容归一化为统一的 schema,并为您生成整洁的报告。只需提供一个 domain、IP、URL、file hash 或 EVM address,它便会分发给 Shodan、VirusTotal、crt.sh、RDAP、urlscan 以及任何您拥有 API key 的服务,然后返回清晰易读的 Markdown 报告。 它专为那些日后可能需要重复执行或提供支持的调查工作而设计,因此每次运行都会保留原始的 provider JSON 数据、归一化后的结果、来源 URL、时间戳、cache 元数据以及任何错误信息。任何数据都不会被丢弃,您可以在事后无需再次查询任何 provider 的情况下重建报告。 其主要功能依赖于被动 API 查询。少数可选的 provider 会调用本地工具直接与目标进行交互。这些工具仅在您传入 `--active` 参数时才会运行,因此常规运行绝不会探测目标本身。 ## 目录 - [功能概述](#what-you-get) - [环境要求](#requirements) - [下载](#download) - [安装](#install) - [API key](#api-keys) - [快速开始](#quick-start) - [Provider](#providers) - [命令](#commands) - [Enrich 标志](#enrich-flags) - [目标类型](#target-types) - [输出](#output) - [Cache](#cache) - [主动探测与 scope gate](#active-probing-and-the-scope-gate) - [重建报告](#rebuilding-reports) - [开发](#development) - [故障排除](#when-something-is-off) ## 功能概述 - **单一目标,多源数据。** 自动检测您输入的是 domain、IP、URL、hash 还是 EVM address,并仅运行适合该目标的 provider。 - **保留所有数据。** 原始响应、归一化的结果、每条结果的来源 URL 以及发现时间,都会统一保存在同一个运行目录中。 - **易读的报告。** 生成一份按 artifact 和 provider 分组的 `summary.md`,以及一份 `sources.md`,方便任何人追溯结果的来源。 - **支持缓存且对速率限制友好。** 响应缓存在 SQLite 中,因此重复运行和独立的命令可以复用数据,而不会消耗 API 配额。 - **默认被动。** 少数本地工具会直接探测目标。除非您传入 `--active` 参数,否则这些工具不会运行,因此常规运行仅执行被动查询。 ## 环境要求 - Python 3.11 或更高版本 - [`uv`](https://docs.astral.sh/uv/) - 您想使用的已配置 API key 的 provider 的 key(均为可选) - 位于 `~/OSINT/bin/` 中的可选本地工具,用于支持依赖二进制程序的 provider 您无需任何 key 即可开始。没有 key 或二进制程序的 provider 会被跳过,因此即使是最基础的安装,您也能免费使用 RDAP 和证书透明度查询。 ## 下载 克隆仓库: ``` git clone https://github.com/0xCatmeat/osint-recon.git cd osint-recon ``` 或者获取 GitHub 归档: ## 安装 使用 `uv` 拉取依赖: ``` uv sync ``` 确保 CLI 可以正常运行: ``` uv run osint-recon --version ``` ## API key key 保存在一个 env 文件中。默认路径为: ``` ~/OSINT/config/apis.env ``` 如果您的 env 文件保存在其他位置,可以使用 `--env PATH` 指定。 ``` mkdir -p ~/OSINT/config cp apis.env.example ~/OSINT/config/apis.env $EDITOR ~/OSINT/config/apis.env chmod 600 ~/OSINT/config/apis.env ``` 它支持的 key 包括: ``` SHODAN_API_KEY=your_key NETLAS_API_KEY=your_key URLSCAN_API_KEY=your_key VIRUSTOTAL_API_KEY=your_key ABUSEIPDB_API_KEY=your_key ETHERSCAN_API_KEY=your_key ``` 只需填入您实际拥有的 key 即可。留空的项将被跳过。 ## 快速开始 查看哪些 provider 已就绪: ``` uv run osint-recon doctor ``` 添加 `--local` 以同时检查本地工具和文件: ``` uv run osint-recon doctor --local ``` 在实际执行前预览运行计划: ``` uv run osint-recon enrich example.com --dry-run ``` ``` uv run osint-recon enrich example.com --dry-run --no-pivots ``` 正式运行: ``` uv run osint-recon enrich example.com ``` 指定自定义的 env 文件: ``` uv run osint-recon --env ./apis.env enrich example.com ``` 针对 EVM address 运行: ``` uv run osint-recon enrich 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B ``` ## Provider | Provider | Key 或依赖 | 目标类型 | 备注 | |---|---|---|---| | Shodan | `SHODAN_API_KEY` | IP | 主机暴露和 CVE 数据。搜索功能为可选,因为会消耗额度。 | | Netlas | `NETLAS_API_KEY` | IP, domain | 主机、DNS、证书和 WHOIS 数据。 | | urlscan | `URLSCAN_API_KEY` | domain, URL | 现有的 urlscan 结果。 | | VirusTotal | `VIRUSTOTAL_API_KEY` | domain, IP, URL, hash | 信誉和分析统计数据。 | | AbuseIPDB | `ABUSEIPDB_API_KEY` | IP | 滥用置信度评分和报告计数。 | | Etherscan | `ETHERSCAN_API_KEY` | EVM address | Ethereum 主网余额和近期交易记录。 | | RDAP | 无 | domain, IP | 注册数据。 | | crt.sh | 无 | domain | 证书透明度名称。 | | subfinder | `~/OSINT/bin/subfinder` | domain | 通过本地二进制程序被动发现子域名。 | | dnsx | `~/OSINT/bin/dnsx` | domain | 通过本地二进制程序获取 DNS 记录。属于主动探测,需要 `--active`。 | | httpx | `~/OSINT/bin/httpx` | domain | 通过本地二进制程序进行 HTTP 探测。属于主动探测,需要 `--active`。 | | tlsx | `~/OSINT/bin/tlsx` | domain, IP | 通过本地二进制程序获取 TLS 证书数据。属于主动探测,需要 `--active`。 | | gau | `~/OSINT/bin/gau` | domain | 通过本地二进制程序获取历史 URL。 | `doctor --local` 还会对它在 `~/OSINT/bin/` 中发现的其他常见工具进行盘点,例如 `mapcidr`、`gitleaks`、`trufflehog`、`nuclei`、`katana` 和 `uncover`。 ## 命令 | 命令 | 功能 | |---|---| | `doctor` | 检查 API key 和 provider 健康状态。 | | `doctor --local` | 同时检查本地路径和二进制程序。 | | `enrich ` | 针对目标运行 provider 并生成报告目录。 | | `normalize ` | 从存储的原始响应重建 `normalized/findings.jsonl`。 | | `report ` | 重建 `summary.md` 和 `sources.md`。 | | `scope-gate` | 在运行主动工具前记录授权信息。 | ## Enrich 标志 | 标志 | 功能 | |---|---| | `--dry-run` | 显示计划的 artifact 和 provider,而不实际进行查询。Domain pivot 可能仍会解析 DNS。 | | `--json` | 输出机器可读格式。 | | `--out PATH` | 使用自定义的报告目录。 | | `--case-id ID` | 设置您自己的案件 ID。 | | `--no-pivots` | 关闭 domain 到 IP 的扩展。 | | `--max-pivots N` | 限制查询的已解析 IP 数量。默认值:`3`。 | | `--active` | 同时运行直接探测目标的本地工具(dnsx, httpx, tlsx)。默认关闭。 | | `--offline` | 仅使用 provider cache。与 `--no-pivots` 搭配使用可同时跳过 DNS。 | | `--refresh` | 忽略已缓存的响应并重新获取最新数据。 | | `--max-age SECONDS` | 仅接受时间小于指定秒数的 cache。 | | `--shodan-search QUERY` | 运行可选的 Shodan 搜索。消耗一次查询额度。 | ## 目标类型 CLI 会自动为您识别目标类型。 | 类型 | 示例 | |---|---| | `domain` | `example.com` | | `ip` | `8.8.8.8`, `2606:4700:4700::1111` | | `url` | `https://example.com/path` | | `hash` | `d41d8cd98f00b204e9800998ecf8427e` | | `evm_address` | `0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B` | 对于 domain,`enrich` 还会解析最多三个 IP,并针对这些 pivot 运行支持 IP 的 provider。如果您希望仅限于 domain 查询,请使用 `--no-pivots`。 ## 输出 默认情况下,运行结果会保存在: ``` ~/OSINT/reports/// ``` 每次运行包含: ``` raw/ raw provider JSON responses normalized/findings.jsonl one JSON object per normalized finding summary.md readable findings grouped by artifact and provider sources.md source URLs and observation times run-metadata.json target, providers, cache stats, errors, file manifest ``` 运行目录在创建时会进行严格的权限锁定:目录权限为 `700`,文件权限为 `600`。证据仅供您阅读,机器上的其他用户无权访问。 ## Cache Provider 响应会被缓存在: ``` ~/OSINT/.cache/osint-recon.sqlite ``` 这个 cache 能防止您频繁请求相同的 API,并允许速率限制在不同的独立运行之间延续。您可以使用 `--refresh` 绕过它,使用 `--offline` 强制依赖它,或者使用 `--max-age SECONDS` 仅信任近期的缓存记录。 ## 主动探测与 scope gate 大多数 provider 执行的是被动查询,但有三个本地工具会直接与目标交互:dnsx(DNS 解析)、httpx(HTTP 探测)和 tlsx(TLS 探测)。除非您传入 `--active` 参数,否则它们不会运行,因此常规的 `enrich` 绝不会探测目标: ``` uv run osint-recon enrich example.com --active ``` 首先使用 `--dry-run --active` 预览主动运行时会执行的操作,并且仅在您确实拥有授权的情况下才开启该功能。 `scope-gate` 命令用于记录该授权。它是一个审计追踪记录,而不是一个开关。它会写入一条 JSON 记录,表明您已获得授权。它不会为您启用 `--active`,其本身也不会执行任何探测: ``` uv run osint-recon scope-gate \ --target example.com \ --scope-file ./scope.txt \ --authorization-note "Bug bounty scope allows testing this domain" ``` ## 重建报告 如果仍然保留了运行目录?您可以直接从存储的原始响应中重建归一化的结果和 Markdown 报告,而无需调用任何 provider: ``` uv run osint-recon normalize ~/OSINT/reports/example.com/20260606T120000Z uv run osint-recon report ~/OSINT/reports/example.com/20260606T120000Z ``` 这在您更改了报告格式,或者想从旧证据中生成新的 Markdown 报告时非常有用。 ## 开发 运行测试: ``` uv run pytest ``` Lint 和格式化: ``` uv run ruff check . uv run ruff format --check . ``` ## 故障排除 已配置 API key 的 provider 被跳过了?检查它正在读取哪个 env 文件: ``` uv run osint-recon doctor uv run osint-recon --env ./apis.env doctor ``` 本地二进制 provider 运行失败?确保这些工具存在且具有可执行权限: ``` uv run osint-recon doctor --local ls -l ~/OSINT/bin/ ``` 希望 domain 运行完全不发起任何网络请求?禁用 pivot 并强制使用缓存数据: ``` uv run osint-recon enrich example.com --offline --no-pivots ``` ## 许可证 MIT
标签:ESC4, GitHub, OSINT, 信息聚合, 威胁情报, 安全调查, 实时处理, 开发者工具, 情报收集, 数据泄露, 漏洞研究, 逆向工具