gs-ai/OSINTai

GitHub: gs-ai/OSINTai

一款集成 Ollama AI 分析的开源情报爬虫,为安全调查和数字取证提供自动化情报采集、结构化提取与风险评估能力。

Stars: 35 | Forks: 10

OSINTai Logo # OSINTai v3.4 - 先进的 AI 驱动 OSINT Web 爬虫 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) [![Async](https://img.shields.io/badge/async-httpx-green.svg)](https://www.python-httpx.org/) [![AI](https://img.shields.io/badge/AI-Ollama-purple.svg)](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, 信息安全, 大语言模型, 情报收集, 数据泄露, 无后门, 漏洞研究, 运行时操纵, 逆向工具