gs-ai/OSINTai
GitHub: gs-ai/OSINTai
一款集成 Ollama AI 分析的开源情报爬虫,为安全调查和数字取证提供自动化情报采集、结构化提取与风险评估能力。
Stars: 35 | Forks: 10
# OSINTai v3.4 - 先进的 AI 驱动 OSINT Web 爬虫
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/)
[](https://www.python-httpx.org/)
[](https://ollama.ai/)
## 概述
**OSINTai** 是一款专为**开源情报 (OSINT)** 专业人士、网络安全研究员和数字调查员设计的尖端 AI 增强 Web 爬虫。借助先进的异步处理、智能代理轮换和最前沿的 LLM 分析,OSINTai 能够以无与伦比的效率和准确性,自动化完成从 Web 来源搜集综合情报的工作。
**核心能力:**
- **高性能异步爬取**,配备智能并发控制
- **AI 驱动的内容分析**,使用 Ollama LLM 提取结构化情报
- **高级指示器挖掘**,涵盖电子邮件、电话、域名、IP、URL、加密货币地址和社交媒体账号
- **基于图谱的情报映射**,支持 ACE-T 兼容的导出格式
- **运营安全**,具备代理轮换、User-Agent 随机化和隐身技术
- **追踪模式**,通过可配置的搜索词进行目标情报发现
- **近似重复检测**,采用加权 Simhash 算法消除冗余内容
- **智能评分**,基于指示器密度和风险因素进行优先级排序
## 主要功能
### 性能与可扩展性
- **异步架构**:支持可配置的全局 (18) 和单主机 (4) 并发限制的并发处理
- **高效的爬取调度器**:O(1) 队列操作,对已访问、已入队和进行中的 URL 进行重复抑制
- **智能代理管理**:带有健康评分的代理轮换,支持自动故障转移、重试跟踪和代理状态持久化
- **自适应限流**:针对单主机的限流可防止网站过载,同时最大化吞吐量
- **恢复能力**:为中断的操作提供自动检查点和状态持久化
- **内存高效**:针对大规模爬取进行了优化,资源开销极低
### AI 驱动的情报
- **LLM 内容分析**:使用 Ollama 模型 (`osint-tuned-v3:latest`) 进行非阻塞的结构化情报提取
- **向量嵌入**:有界异步语义内容嵌入,用于聚类和相似性分析 (`bge-m3:latest`)
- **风险情报**:自动识别可疑模式、高风险指示器和威胁信号
- **上下文分析**:通过实体关系和时间分析深入理解内容
### 高级情报提取
- **全面的指示器挖掘**:提取电子邮件、电话号码、URL、域名、IPv4 地址、BTC 地址、ETH 地址和社交媒体账号
- **追踪模式**:针对特定情报术语进行定向爬取,具有可配置的线索发现限制
- **内容去重**:加权 Simhash 近似重复检测,在保留不同线索的同时消除冗余信息
- **情报评分**:基于指示器密度、风险标志和内容相关性进行自动优先级排序
### 情报评分算法
OSINTai 采用复杂的多因素评分系统,将传统的指示器挖掘与 AI 驱动的风险评估相结合,根据情报价值对页面进行优先级排序:
#### 传统指示器(基础评分)
- **电子邮件**:每个 2.0 分(最多 10 个 = 20 分)
- **电话号码**:每个 1.5 分(最多 5 个 = 7.5 分)
- **BTC 地址**:每个 3.0 分(最多 3 个 = 9 分)
- **ETH 地址**:每个 3.0 分(最多 3 个 = 9 分)
- **社交媒体账号**:每个 1.0 分(最多 5 个 = 5 分)
#### AI 分析增强(情报提升)
- **风险标志**:每个 5.0 分(无限制 - 最高优先级的情报)
- 示例:“黑客活动”、“数据泄露”、“监管变化”
- **可操作线索**:每个 3.0 分(无限制 - 有价值的见解)
- 示例:调查建议、战略情报
- **关键实体**:每个 1.0 分(最多 10 个实体 = 10 分)
- 命名实体,如组织、人员、技术
- **关键位置**:每个 1.5 分(最多 5 个位置 = 7.5 分)
- 地理情报和运营位置
- **关键词**:每个 0.5 分(最多 20 个关键词 = 10 分)
- 主题相关性和内容分类
#### 评分示例
- **高价值页面**:风险标志 (10 分) + 可操作线索 (9 分) + 实体 (8 分) = 27+ 分
- **中价值页面**:实体 (6 分) + 位置 (4.5 分) + 关键词 (8 分) = 18.5 分
- **低价值页面**:仅包含基本指示器(电子邮件、电话) = 5-15 分
页面将根据总分自动排名,其中 AI 增强的情报在 OSINT 分析中享有最高优先级。
### 数据导出与可视化
- **图谱导出**:兼容 ACE-T 的 JSONL 格式,包含页面、域名、IP、电子邮件、电话、加密货币和账号节点
- **多格式报告**:结构化的 JSON、JSONL 和人类可读的情报摘要
- **可视化就绪**:兼容 GraphXR、Neo4j、NetworkX 和 D3.js,便于进行高级分析
- **综合元数据**:完整的爬取状态、分析结果、时间戳和来源追踪
### 运营安全与伦理
- **User-Agent 轮换**:庞大的随机化池,避免被检测和指纹识别
- **代理匿名化**:内置代理健康管理,支持自动轮换
- **可配置延迟**:自适应时间控制,尊重网站策略并避免触发限流
- **域名过滤**:可选的同域名限制,用于专注且受控的分析
- **伦理设计**:专为授权的 OSINT 研究打造,负责任地处理数据
## 安装
### 前置条件
- **Python 3.10+**
- **Conda**(推荐用于环境管理)
- **Ollama**(可选,用于 AI 驱动功能)
### 快速设置
```
# 克隆仓库
git clone https://github.com/yourusername/OSINTai.git
cd OSINTai
# 创建 conda 环境
conda create -n osintai python=3.10 beautifulsoup4 httpx anyio lxml -y
conda activate osintai
# 安装 Ollama(用于 AI 功能)
brew install ollama
ollama pull osint-tuned-v3:latest
ollama pull bge-m3:latest
# 验证安装
python run_osintai.py --help
```
### 备选安装方式 (pip)
```
pip install beautifulsoup4 httpx anyio lxml
```
## 快速开始
### 激活环境
```
cd ~/Desktop/Projects/OSINTai
conda activate osintai
```
### 无 AI 的快速基础爬取
```
python run_osintai.py \
--seed "https://example.com" \
--depth 2 \
--max 150 \
--same-domain \
--no-ollama
```
### 推荐的 OSINT 爬取
```
python run_osintai.py \
--seed "https://example.com" \
--depth 2 \
--max 150 \
--same-domain
```
默认的 Ollama 模型:
```
Analysis: osint-tuned-v3:latest
Embeddings: bge-m3:latest
```
### 深度调查
```
python run_osintai.py \
--seed "https://target-site.com" \
--depth 3 \
--max 300 \
--same-domain \
--concurrency 10 \
--per-host 3 \
--run-id "target_investigation_001"
```
### 目标追踪模式
```
python run_osintai.py \
--seed "https://target-site.com" \
--hunt "breach,credential,telegram,crypto,invoice,wire transfer,malware" \
--hunt-max 75 \
--depth 3 \
--max 300 \
--same-domain
```
### 大型但受控的爬取
```
python run_osintai.py \
--seed "https://target-site.com" \
--depth 4 \
--max 1000 \
--same-domain \
--concurrency 18 \
--per-host 4
```
### 使用代理
```
python run_osintai.py \
--seed "https://target-site.com" \
--proxies "proxies.txt" \
--depth 3 \
--max 300 \
--same-domain \
--concurrency 8 \
--per-host 2
```
### 查看帮助
```
python run_osintai.py --help
```
### 多种子 URL 爬取
在项目根目录创建一个 `seed_urls.txt` 文件:
```
https://site1.com
https://site2.com
https://site3.com
```
然后运行:
```
python run_osintai.py --seed "https://example.com" # Will also check for seed_urls.txt
```
## 命令行选项
```
usage: run_osintai.py [-h] [--seed SEED] [--depth DEPTH] [--max MAX]
[--same-domain] [--concurrency CONCURRENCY]
[--per-host PER_HOST] [--ua UA] [--proxies PROXIES]
[--model MODEL] [--embed-model EMBED_MODEL]
[--no-ollama] [--hunt HUNT] [--hunt-max HUNT_MAX]
[--run-id RUN_ID]
OSINTai v3.4 FULL (async + proxy + dedupe + embeddings + hunt + graph export)
required arguments:
--seed SEED Seed URL (or use seed_urls.txt file)
optional arguments:
--depth DEPTH Max crawl depth (default: 2)
--max MAX Max URLs to crawl (default: 150)
--same-domain Only crawl same domain as seed
--concurrency CONCURRENCY Global concurrency limit (default: 18)
--per-host PER_HOST Per-host concurrency limit (default: 4)
--ua UA User agents file (default: user_agents.txt)
--proxies PROXIES Optional proxy list file
--model MODEL Ollama analysis model (default: osint-tuned-v3:latest)
--embed-model EMBED_MODEL Ollama embeddings model (default: bge-m3:latest)
--no-ollama Disable LLM analysis and embeddings
--hunt HUNT Comma-separated hunt terms (optional)
--hunt-max HUNT_MAX Max lead URLs per page from hunt mode (default: 50)
--run-id RUN_ID Optional run ID override (default: auto-generated)
```
## 输出结构
每次爬取都会在 `data/runs/` 目录下生成一个带有时间戳的目录,其中包含全面的情报数据:
### 核心情报数据
- **`urls_crawled.jsonl`** - 包含 HTTP 状态、时间戳和元数据的完整爬取日志
- **`indicators.jsonl`** - 提取的电子邮件、电话、URL、域名、IP、加密货币地址和社交媒体账号
- **`page_scores.jsonl`** - 经过情报评分的页面,包含分析结果和风险评估
- **`crawl_state.json`** - 包含已访问 URL、待处理队列和 Simhash 历史记录的恢复状态
### AI 分析结果(启用时)
- **`analysis/`** - JSON 格式的独立页面情报分析
- **`embeddings/`** - 用于语义聚类和相似性分析的向量嵌入
- **`hunt.jsonl`** - 目标追踪模式的发现(当指定追踪词时)
### 情报报告
- **`report.txt`** - 人类可读的包含关键发现的执行摘要
- **`ranked_pages.json`** - 结构化的情报优先级排序和评分
- **`graph_nodes.jsonl`** - 用于网络可视化与分析的图谱节点
- **`graph_edges.jsonl`** - 图谱关系与连接
### 原始内容存档
- **`pages_raw/`** - 用于取证分析的原始 HTML 内容
- **`pages_text/`** - 用于处理和审查的提取文本内容
### 输出结构示例
```
data/runs/2026-01-16_143022_investigation_001/
├── urls_crawled.jsonl # Complete crawl audit trail
├── indicators.jsonl # Intelligence indicators
├── page_scores.jsonl # Intelligence scoring
├── crawl_state.json # Resume capability
├── analysis/ # AI analysis results
│ ├── abc123.analysis.json
│ └── def456.analysis.json
├── embeddings/ # Vector embeddings
│ ├── abc123.embed.json
│ └── def456.embed.json
├── pages_raw/ # Raw HTML archive
├── pages_text/ # Text extraction
├── hunt.jsonl # Hunt mode results
├── report.txt # Executive summary
├── ranked_pages.json # Structured intelligence
├── graph_nodes.jsonl # Graph visualization
└── graph_edges.jsonl # Graph relationships
```
## 配置文件
### User Agents (`user_agents.txt`)
**用途**:请求头随机化,避免被检测
**格式**:每行一个 User-Agent 字符串
**位置**:项目根目录
### 代理列表(可选)
**用途**:IP 轮换与匿名化
**格式**:每行一个代理 URL (`http://ip:port` 或 `ip:port`)
**位置**:任何可访问的文件路径
### 种子 URL (`seed_urls.txt`) - 可选
**用途**:批量处理多个起始点
**格式**:每行一个 URL
**位置**:项目根目录(自动检测)
**示例**:
```
https://target1.com/investigation
https://target2.com/research
https://target3.com/analysis
```
## 高级使用模式
### 情报流水线工作流
```
# Phase 1:广泛发现(高速)
python run_osintai.py \
--seed "https://target.com" \
--max 500 \
--no-ollama \
--concurrency 32
# Phase 2:深度 AI 分析(质量优先于速度)
python run_osintai.py \
--seed "https://target.com" \
--max 100 \
--model "osint-tuned-v3:latest" \
--concurrency 8
# Phase 3:目标情报搜索
python run_osintai.py \
--seed "https://target.com" \
--hunt "malware,ransomware,exploit,credential" \
--hunt-max 100 \
--depth 4
```
### 大规模企业爬取
```
python run_osintai.py \
--seed "https://enterprise-site.com" \
--max 2000 \
--concurrency 24 \
--per-host 4 \
--depth 5 \
--run-id "enterprise_audit_2026"
```
### 自定义模型集成
```
# 使用不同的 Ollama 模型
python run_osintai.py \
--seed "https://target.com" \
--model "llama2:13b" \
--embed-model "all-minilm:33m"
```
### 取证数据保留
```
# 调查的最大数据保留期
python run_osintai.py \
--seed "https://evidence-site.com" \
--max 50 \
--depth 3 \
--run-id "forensic_case_123"
```
## 图谱导出与可视化
OSINTai 生成兼容 ACE-T 的图谱数据,用于高级网络分析和可视化:
### 节点类型
- **页面**:具有情报评分和元数据的 Web 页面
- **指示器**:提取的实体,包括域名、IP、电子邮件、电话、BTC/ETH 地址和社交媒体账号
- **关系**:页面到指示器的关系,例如 `mentions_domain`、`mentions_ip`、`mentions_email` 和 `mentions_handle`
### 节点格式示例
```
{"id": "page:https://example.com/intel", "type": "page", "label": "Intelligence Page", "props": {"title": "Secret Intel", "score": 25.7, "risk_flags": ["suspicious"]}, "ts": 1705411200.0}
{"id": "email:investigator@agency.gov", "type": "email", "label": "investigator@agency.gov", "props": {"confidence": 0.95}, "ts": 1705411200.0}
{"id": "ip:203.0.113.10", "type": "ip", "label": "203.0.113.10", "props": {}, "ts": 1705411200.0}
```
### 边格式示例
```
{"src": "page:https://example.com/intel", "dst": "email:investigator@agency.gov", "type": "mentions_email", "props": {"context": "contact information"}, "ts": 1705411200.0}
{"src": "page:https://example.com/intel", "dst": "ip:203.0.113.10", "type": "mentions_ip", "props": {}, "ts": 1705411200.0}
```
### 可视化平台
- **GraphXR**:直接导入 JSONL 进行实时图谱探索
- **Neo4j**:使用 Cypher 查询的企业级图数据库
- **NetworkX**:Python 图谱分析与算法处理
- **D3.js**:基于 Web 的自定义可视化和仪表盘
## 性能优化
### 并发调优
- **全局并发**:总同时请求数(推荐:12-24)
- **单主机并发**:特定域名限制(推荐:3-6)
- **队列效率**:爬虫使用 O(1) 的出队操作,并抑制重复的待处理 URL
- **内存扩展**:对于大规模爬取(>1000 个 URL),请降低并发度
### 网络优化
- **代理分配**:将负载分散到多个 IP 地址,并记录每个代理的成功/失败评分
- **延迟配置**:根据目标网站的敏感度调整时间
- **超时管理**:针对缓慢的网络或国际目标增加超时时间
### AI 性能
- **模型选择**:平衡准确性与速度(推荐 `osint-tuned-v3:latest`)
- **有界异步 AI 任务**:Ollama 分析和嵌入异步运行,不会阻塞 HTTP 爬取
- **嵌入优化**:向量存储每页大约需要 ~700KB 空间
## 故障排除
### 常见问题与解决方案
**Ollama 连接失败**
```
# 验证 Ollama 服务
ollama serve
ollama list
# 测试模型可用性
ollama run osint-tuned-v3:latest "test"
# 回退到非 AI 模式
python run_osintai.py --seed "https://example.com" --no-ollama
```
**代理配置问题**
```
# 验证代理文件格式
head -5 proxies.txt
# 测试代理连通性
curl -x http://proxy-ip:port https://httpbin.org/ip
# 不使用 proxies 运行
python run_osintai.py --seed "https://example.com"
```
**内存/资源限制**
```
# 减少大规模爬取的并发数
python run_osintai.py \
--seed "https://example.com" \
--concurrency 8 \
--per-host 2 \
--max 500
```
**检测到限流**
```
# 增加请求之间的延迟
# 修改 fetcher.py:min_delay_s、max_delay_s 默认值
# 或使用代理轮换进行分发
```
### 调试模式
```
# 启用详细日志记录(修改 cli.py)
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
```
## 架构
### 核心模块结构
```
src/osintai/
├── cli.py # Command-line interface and orchestration
├── crawler.py # Async crawling engine with deduplication
├── fetcher.py # HTTP client with proxy rotation and retry logic
├── extractor.py # Content parsing and indicator extraction
├── analyzer.py # Intelligence scoring and risk assessment
├── ollama_api.py # Async LLM integration for analysis and embeddings
├── proxy_pool.py # Proxy health management and rotation
├── graph_export.py # Graph data serialization and export
├── hunt.py # Targeted term discovery and lead generation
├── normalize.py # URL processing and normalization utilities
├── dedupe.py # Simhash-based content deduplication
├── scoring.py # Page ranking and intelligence prioritization
├── report.py # Human-readable report generation
├── storage.py # File I/O and data persistence utilities
└── __init__.py # Package initialization
```
### 数据处理流水线
1. **初始化**:解析参数,加载配置,初始化组件
2. **调度**:标准化 URL 并将其加入队列,在已入队、活跃和已访问状态之间进行重复抑制
3. **爬取**:带有并发控制、单主机限制、重试和代理轮换的异步 HTTP 获取
4. **处理**:内容提取、指示器挖掘和加权 Simhash 去重
5. **分析**:非阻塞的、LLM 驱动的情报提取和嵌入生成
6. **评分**:风险评估、优先级排序和情报价值计算
7. **持久化**:结构化数据导出和图谱生成
8. **报告**:人类可读的摘要和可视化数据
## 安全与伦理
### 运营安全功能
- **匿名化**:代理轮换和 User-Agent 随机化
- **身技术**:自适应延迟和请求模式
- **数据脱敏**:不记录敏感信息
- **来源追踪**:完整的情报保管链审计追踪
### 伦理使用指南
- **合法合规**:仅授权访问公开可用的信息
- **尊重条款**:遵守网站策略、robots.txt 和服务协议
- **数据处理**:安全存储并负责任地分发情报
- **归属**:维护来源的可信度和调查的完整性
### 负责任的研究
- **授权**:在进行敏感调查之前获得适当许可
- **透明度**:记录方法论和数据来源
- **影响评估**:考虑发现的潜在后果
- **社区标准**:遵守 OSINT 职业道德和最佳实践
## 贡献
### 开发环境
```
# Fork 并克隆
git clone https://github.com/yourusername/OSINTai.git
cd OSINTai
# 创建开发环境
conda create -n osintai-dev python=3.10 -y
conda activate osintai-dev
pip install -r requirements.txt
# 安装开发工具
pip install black flake8 pytest mypy
```
### 代码质量标准
- **格式化**:使用 Black 代码格式化工具,行长 120 个字符
- **Linting**:使用 flake8 保证代码质量和风格一致性
- **类型提示**:完整的类型注释覆盖
- **测试**:全面的单元和集成测试
- **文档**:详细的 docstring 和行内注释
### 贡献工作流
1. Fork 该仓库
2. 创建一个功能分支 (`git checkout -b feature/amazing-enhancement`)
3. 实现带有测试的更改
4. 确保所有测试通过 (`pytest`)
5. 格式化代码 (`black .`)
6. Lint 代码 (`flake8`)
7. 使用清晰的消息提交
8. Push 并创建 Pull Request
## 许可证
**MIT 许可证** - 完整条款请参见 [LICENSE](LICENSE) 文件。
## 法律免责声明
**OSINTai** 专为**合乎伦理的开源情报研究**和**授权的安全调查**而开发。此工具不得用于未经授权的监视、数据收集或任何非法活动。
**用户需自行承担全部责任**,确保遵守适用的法律、法规和服务条款。对于滥用或未经授权使用本软件,作者不承担任何责任。
**在进行任何情报操作之前,请获取适当的授权。**
## 更新日志
### v3.4 FULL (2026-07-11) - 当前发布版
- **高效的爬取调度**:O(1) 队列操作,在已入队、活跃和已访问的 URL 之间进行重复抑制
- **稳健的恢复状态**:在不丢失多种子上下文的情况下恢复待处理工作、已访问 URL 和 Simhash 历史记录
- **主动代理轮换**:将代理应用于出站请求,带有单代理成功/失败评分和持久化的健康状态
- **加权 Simhash 去重**:针对重复页面模板和镜像内容提供更高保真度的近似重复检测
- **异步 Ollama 集成**:LLM 分析和嵌入通过具有有界并发的非阻塞 HTTP 调用运行
- **扩展的指示器挖掘**:提取域名、IP 地址、URL、电子邮件、电话、BTC/ETH 地址和社交媒体账号
- **更丰富的图谱情报**:导出页面到域名、页面到 IP、页面到电子邮件、页面到电话、页面到加密货币以及页面到账号的关系
- **追踪模式**:具有可配置参数的目标情报发现
### v3.3 FULL (2026-01-16)
- **完全异步重写**:使用 httpx + asyncio 实现高吞吐量爬取
- **Ollama API 集成**:原生 LLM 分析和向量嵌入
- **ACE-T 图谱导出**:专业的可视化和网络分析
- **恢复能力**:自动状态持久化和崩溃恢复
- **模块化架构**:在 `src/osintai/` 包中进行清晰的分离
### v3.1 (旧版 - 已弃用)
- 同步爬取架构
- 基本的指示器提取
- 子进程 Ollama 集成
- 有限的可扩展性和性能
## 支持与社区
- **Bug 报告**:[GitHub Issues](https://github.com/yourusername/OSINTai/issues)
- **功能请求**:[GitHub Discussions](https://github.com/yourusername/OSINTai/discussions)
- **文档**:代码内全面的 docstring 和本 README
- **社区**:OSINT 专业论坛和安全研究社区
## 致谢
专为 OSINT 社区而构建,感谢全球安全研究员、数字调查员和开源情报专业人士的贡献。
**负责任地使用。合乎伦理地研究。产生积极的影响。**
*OSINTai v3.4 - 照亮开源情报的阴影。*标签:AI风险缓解, DLL 劫持, ESC4, meg, OSINT, Python, 信息安全, 大语言模型, 情报收集, 数据泄露, 无后门, 漏洞研究, 运行时操纵, 逆向工具