jasonsford/intel_collector

GitHub: jasonsford/intel_collector

一个轻量级威胁情报聚合工具,通过统一的命令行和 Python 接口并行查询多个公开与企业情报源,快速获取 IP、域名和文件哈希的关联数据。

Stars: 31 | Forks: 5

# intel_collector 一个综合性的威胁情报聚合器,通过查询多个公共和企业 API 来获取域名、IP 地址和文件哈希。 ## 核心功能 (v3.0) - **单文件架构**:所有来源整合到一个使用注册表模式的模块化脚本中 - **动态 `.env` 路由**:根据 API 密钥的存在与否自动启用/禁用来源。将密钥留空即可跳过该提供商 - **请求缓存**:内置 `requests-cache` 可对相同查询进行去重,节省 API 调用次数,并加快重复侦察运行的速度 - **Web 就绪 API**:提供可直接使用的 `get_intel_results()` 函数,适用于 FastAPI/Flask/Starlette 后端 - **详细日志记录**:使用结构化日志替换了 `print()` 语句。通过启用 `--verbose` 进行 `DEBUG` 级别的故障排除 - **速率限制**:可配置的 API 调用间延迟,以遵守提供商限制并避免触发限流 - **自动验证**:使用 Python 的 `ipaddress` 标准库和正则表达式进行严格的 IP、域名和哈希验证 - **已移除的来源**:BinaryEdge (已停用)、EchoTrail (已停用)、Onyphe (仅限付费) ## 安装与设置 # 安装依赖 pip install -r requirements.txt # 设置环境配置 cp .env.example .env # 使用你的 API 密钥编辑 .env ``` --- ## 配置 (`.env`) All API keys are managed via a single `.env` file. Sources without configured keys are automatically skipped at runtime. | Source | Required `.env` Variables | |--------|---------------------------| | **Circl.lu** | `CIRCL_API_KEY` | | **CrowdStrike** | `CRWD_CLIENT_ID`, `CRWD_CLIENT_SECRET` | | **Emerging Threats** | `ETINTEL_API_KEY` | | **Filescan.io** | `FILESCAN_API_KEY` | | **GreyNoise** | `GREYNOISE_API_KEY` | | **Hybrid Analysis** | `HYBRID_API_KEY` | | **LeakIX** | `LEAKIX_API_KEY` | | **Microsoft Defender** | `MSDE_TENANT_ID`, `MSDE_CLIENT_ID`, `MSDE_CLIENT_SECRET` | | **Netlas** | `NETLAS_API_KEY` | | **Pulsedive** | `PULSEDIVE_API_KEY` | | **Shodan** | `SHODAN_API_KEY` | | **Stalkphish** | `STALKPHISH_API_KEY` | | **Stratosphere IPS** | *(No key required)* | | **Triage** | `TRIAGE_API_KEY` | | **URLhaus** | `URLHAUS_API_KEY` | | **URLScan** | `URLSCAN_API_KEY` | | **VirusTotal** | `VIRUSTOTAL_API_KEY` | --- ## 使用方法 ### Command Line Interface ```bash # 查询 IP 地址 python intel_collector.py 103.161.17.242 -t ip # 查询 domain(JSON 输出,限制为特定 sources) python intel_collector.py example.com -t domain --source Shodan VirusTotal # 自定义延迟和 verbose 日志记录的 CSV 输出 python intel_collector.py 870c31aa344b2950d0ea4849a472dafed312ecee8aa212c47bf543668bbee8e9 \ -t hash --format csv --delay 1.0 --verbose --output-dir ./reports # 禁用文件保存(仅 stdout) python intel_collector.py malware.com -t domain --no-save ``` **CLI 参数:** | 标志 | 描述 | |------|-------------| | `indicator` | 域名、IP 或 SHA256/MD5/SHA1 哈希 | | `-t, --type` | 强制指定 `domain`、`ip` 或 `hash` 类型 | | `-f, --format` | 输出格式:`json` (默认) 或 `csv` | | `-s, --source` | 限制为特定的提供商 (以空格分隔) | | `-o, --output-dir` | 保存报告的目录 | | `--no-save` | 跳过文件输出,仅打印到标准输出 | | `-d, --delay` | 来源之间的速率限制延迟 (秒) | | `-v, --verbose` | 启用 DEBUG 级别日志 | ### Python API ``` from intel_collector import IntelCollector # 使用自定义设置初始化 collector collector = IntelCollector( output_dir="./reports", rate_limit_delay=0.5, verbose=False ) # 运行查询(自动检测 indicator 类型) result = collector.find("103.161.17.242", sources=["GreyNoise", "Shodan"], save_file=True) # 访问结构化数据 print(f"Queried: {result.sources_queried}") print(f"Found in: {list(result.results.keys())}") ``` ### Web 集成 (FastAPI 示例) 内置的 `get_intel_results()` 函数返回严格可 JSON 序列化的字典,使其可以轻松集成到任何 Web 框架中: ``` from fastapi import FastAPI from intel_collector import get_intel_results app = FastAPI() @app.get("/intel/{indicator}") def lookup_indicator(indicator: str, indicator_type: str = None, source: str = None): sources = source.split(",") if source else None return get_intel_results(indicator, indicator_type=indicator_type, sources=sources, save=False) ``` **响应格式:** ``` { "query_type": "ip", "query_value": "103.161.17.242", "timestamp": "2026-05-13T17:22:59.123456+00:00", "sources_queried": ["GreyNoise", "Shodan", "VirusTotal"], "results": { "GreyNoise": { "ip": "...", "noise": false }, "VirusTotal": { "data": { "attributes": { ... } } } }, "output_path": "./reports/103_161_17_242_20260513_172259.json" } ``` ## 📊 支持的来源与功能 | 来源 | 域名 | IP | 哈希 | 需要认证 | |--------|---------|-----|--------|---------------| | **Circl.lu** | ❌ | ❌ | ✅ | 无 | | **CrowdStrike** | ❌ | ✅ | ✅ | `CRWD_*` | | **Emerging Threats** | ✅ | ✅ | ✅ | `ETINTEL_API_KEY` | | **Filescan.io** | ❌ | ❌ | ✅ | `FILESCAN_API_KEY` | | **GreyNoise** | ❌ | ✅ | ❌ | `GREYNOISE_API_KEY` | | **Hybrid Analysis** | ❌ | ❌ | ✅ | `HYBRID_API_KEY` | | **LeakIX** | ❌ | ✅ | ❌ | `LEAKIX_API_KEY` | | **Microsoft Defender** | ✅ | ✅ | ✅ | `MSDE_*` | | **Netlas** | ✅ | ✅ | ❌ | `NETLAS_API_KEY` | | **Pulsedive** | ✅ | ✅ | ✅ | `PULSEDIVE_API_KEY` | | **Shodan** | ✅ | ✅ | ❌ | `SHODAN_API_KEY` | | **Stalkphish** | ❌ | ✅ | ❌ | `STALKPHISH_API_KEY` | | **Stratosphere IPS** | ❌ | ✅ | ❌ | 无 | | **Triage** | ✅ | ✅ | ✅ | `TRIAGE_API_KEY` | | **URLhaus** | ✅ | ❌ | ❌ | `URLHAUS_API_KEY` | | **URLScan** | ✅ | ✅ | ✅ | `URLSCAN_API_KEY` | | **VirusTotal** | ✅ | ✅ | ✅ | `VIRUSTOTAL_API_KEY` | ## 输出与日志记录 - **文件输出**:带有时间戳的 `.json` 或 `.csv` 文件将保存到 `output_dir/` - **控制台输出**:带有时间戳和严重级别的结构化日志记录 2026-05-13 17:22:59 [INFO] intel_collector: → GreyNoise 2026-05-13 17:22:59 [INFO] intel_collector: Warning: GreyNoise returned no data 2026-05-13 17:22:59 [ERROR] intel_collector: Shodan unexpected error: ConnectionError 2026-05-13 17:22:59 [INFO] intel_collector: Results saved to ./reports/103_161_17_242_20260513_172259.json - **缓存**:`requests-cache` 将成功的响应存储 1 小时。相同的查询将命中缓存而不是网络。 ## 配置与模块化 - **动态来源路由**:`SOURCES_REGISTRY` 字典驱动执行过程。通过定义查询函数并将其附加到注册表中即可添加新的提供商。 - **选择性执行**:使用 `--source Shodan VirusTotal` 或传递 `sources=["Shodan", "VirusTotal"]` 来限制范围。 - **优雅降级**:按来源捕获网络故障、API 速率限制或缺少密钥等异常。其他提供商将继续执行。 - **可扩展性**:旨在按照既定模式轻松添加新的情报源。 ## 许可证 本项目基于 [GPLv3 许可证](https://choosealicense.com/licenses/gpl-3.0/) 授权。 ## 作者 **Jason Ford** GitHub: [github.com/jasonsford](https://github.com/jasonsford) LinkedIn: [JasonSFord](https://www.linkedin.com/in/jasonsford/)
标签:API查询, API集成, AV绕过, ESC4, FastAPI, Flask, GitHub, IP地址查询, OSINT, Starlette, Web API, 可观测性, 合规, 商业软件, 域名查询, 威胁情报, 实时处理, 开发者工具, 开源, 情报分析, 情报收集, 情报聚合, 文件哈希查询, 漏洞研究, 环境变量配置, 网络安全, 网络诊断, 网络调试, 自动化, 自动验证, 请求缓存, 逆向工具, 隐私保护