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, 可观测性, 合规, 商业软件, 域名查询, 威胁情报, 实时处理, 开发者工具, 开源, 情报分析, 情报收集, 情报聚合, 文件哈希查询, 漏洞研究, 环境变量配置, 网络安全, 网络诊断, 网络调试, 自动化, 自动验证, 请求缓存, 逆向工具, 隐私保护