OpenOSINT:从终端自主执行 OSINT 调查的 AI 智能体

26 阅读2分钟

OpenOSINT 是一个以 AI 智能体为核心的开源 Python OSINT 框架。

你只需用自然语言输入目标,智能体就会自动决定运行哪些工具,根据发现的信息进行链式调用,并保存结构化的 Markdown 报告。

演示

OpenOSINT 演示

实际会话示例:

$ openosint
openosint ❯ investigate target@example.com

  → generate_dorks('target@example.com')
  → search_email('target@example.com')
  ✓ Found: Spotify, WordPress, Gravatar, Office365

  → search_breach('target@example.com')
  ✓ Found in 2 breaches: LinkedIn (2016), Adobe (2013)

  → search_username('target_handle')
  ✓ Found on: GitHub, Reddit, HackerNews, Twitter

  ╭──────────────── Report ────────────────╮
  │ ## Online Presence                     │
  │ Spotify · WordPress · Gravatar         │
  │                                        │
  │ ## Data Breaches                       │
  │ LinkedIn (2016) · Adobe (2013)         │
  ╰────────────────────────────────────────╯

  ✓ Report saved → reports/2026-05-16_report.md

从邮箱 → 关联账号 → 自动用户名跳转 → 跨平台搜索,全程无需人工干预。

为什么要做这个工具

典型的 OSINT 调查工作流是这样的:

  1. 打开终端,用 holehe 调查邮箱
  2. 复制找到的用户名
  3. 切换到 sherlock 搜索用户名
  4. 打开浏览器手动查 HaveIBeenPwned
  5. 再开一个标签查 WHOIS
  6. 做笔记,不断重复

每个工具都是信息孤岛,每次跳转都是手动操作。调查逻辑只存在于你的脑子里,关掉终端就消失了。

OpenOSINT 解决了这个问题。

核心设计:为什么工具结果不会产生幻觉

大多数 AI 工具包装器都存在一个根本问题:模型可能生成看起来合理但实际上并不存在的结果。

OpenOSINT 使用 Anthropic 原生 tool use API。当模型需要调用工具时,它会硬停止并发出一个 tool_use 块。你的代码运行真实的二进制文件,真实的输出返回到上下文中。

while True:
    response = client.messages.create(
        model="claude-...",
        tools=TOOL_SCHEMAS,
        messages=messages
    )

    # 智能体完成 — 提取最终报告
    if response.stop_reason == "end_turn":
        break

    # 智能体需要工具 — 运行真实二进制
    if response.stop_reason == "tool_use":
        tool_results = []

        for block in response.content:
            if block.type == "tool_use":
                # 运行 holehe、sherlock 等真实子进程
                real_output = await execute_tool(block.name, block.input)

                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": real_output  # 真实输出,不是生成的
                })

        messages.append({"role": "assistant", "content": response.content})
        messages.append({"role": "user", "content": tool_results})

模型从不生成工具结果,它只读取真实输出。

如果 sherlock 找到 12 个档案,这 12 个 URL 会原封不动地返回上下文。模型无法凭空添加第 13 个不存在的结果。

工具结果的幻觉在架构层面被彻底排除,而不仅仅是通过提示词规避。

9 个内置工具

工具

后端

获取信息

search_email

holehe

邮箱关联的社交账号

search_username

sherlock

300+ 平台的账号

search_breach

HaveIBeenPwned v3

数据泄露记录和泄露数据类型

search_whois

python-whois

注册人、注册商、创建日期

search_ip

ipinfo.io

地理位置、ASN、主机名

search_domain

sublist3r

子域名枚举

generate_dorks

内置

12 个定向 Google Dork URL(无网络请求)

search_paste

psbdmp.ws

Pastebin 泄露内容搜索

search_phone

phoneinfoga

运营商、国家、线路类型

search_virustotal

VirusTotal API v3

70+ 引擎的恶意软件检测

search_shodan

Shodan API

网络资产和漏洞信息

如果某个依赖二进制未安装,该工具返回描述性错误字符串,其他工具继续正常运行。

三种使用方式

交互式 AI REPL(默认)

$ openosint
# 或
$ openosint shell

用自然语言输入目标或问题:

openosint ❯ investigate target@example.com
openosint ❯ 找出 johndoe99 的所有账号
openosint ❯ example.com 有哪些子域名?
openosint ❯ +14155552671 是手机号吗?

每次调查完成后,报告会自动保存到 reports/ 目录。

REPL 内置命令:

命令

说明

clear

重置对话记忆

save

手动保存最后一份报告

tools

显示可用工具及状态

history

浏览历史会话

config

显示当前配置

help

列出所有命令

exit 或 Ctrl-D

退出

直接 CLI(无需 AI)

适用于脚本编写和自动化:

# 邮箱账号枚举(默认超时:120 秒)
openosint email target@example.com

# 自定义超时
openosint email target@example.com -t 60

# 用户名搜索(默认超时:180 秒)
openosint username johndoe99

# 多目标调查
openosint multi targets.txt

# VirusTotal 检测
openosint virustotal 192.168.1.1

# 详细输出
openosint -v email target@example.com

无需 Anthropic API Key。

MCP 服务器

将全部工具暴露给任何兼容 MCP 的 AI 客户端。

注册到 Claude Code:

claude mcp add openosint python /path/to/OpenOSINT/openosint/mcp_server.py
claude mcp list  # 验证

Claude Desktop 配置(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "openosint": {
      "command": "python",
      "args": ["/path/to/OpenOSINT/openosint/mcp_server.py"]
    }
  }
}

也支持通过 Ollama 使用本地模型(无需 API Key):

openosint --provider ollama --ollama-model llama3.2

架构设计

代码库分为五个严格的层次,禁止向上层导入:

openosint/tools/        核心工具层
                        真实二进制和 API 的异步封装
                        无状态。不依赖 AI。纯函数。

openosint/agent.py      AI 智能体层
                        Anthropic tool use 循环
                        每次会话的对话历史

openosint/repl.py       交互式 REPL(prompt_toolkit + Rich)
openosint/mcp_server.py MCP 服务器(stdio 传输)
openosint/cli.py        CLI 入口点

AI 层完全可选。没有 API Key 也可以使用 CLI 和 MCP 服务器。

安装

git clone https://github.com/OpenOSINT/OpenOSINT.git
cd OpenOSINT
pip install -e .

或直接从 PyPI 安装:

pip install openosint

安装外部工具:

pip install holehe sherlock-project sublist3r

环境变量配置:

export ANTHROPIC_API_KEY=sk-ant-...   # AI REPL 必需
export HIBP_API_KEY=your_key          # HaveIBeenPwned v3
export IPINFO_TOKEN=your_token        # ipinfo.io 速率限制
export VIRUSTOTAL_API_KEY=your_key    # VirusTotal
export SHODAN_API_KEY=your_key        # Shodan

总结

OpenOSINT 提供三种使用方式:

  • openosint — AI REPL,适合完整的自动链式调查
  • openosint email / openosint username — 直接 CLI,适合脚本和自动化
  • MCP 服务器 — 在 Claude Code / Claude Desktop 中直接运行调查

MIT 许可证。Python 3.10+。仅限授权的安全研究使用。

如果觉得有用,欢迎在 GitHub 点个 Star ⭐

⚠️ 本工具仅供授权的安全研究、渗透测试和调查性新闻使用。用户须自行承担遵守适用法律(包括 GDPR、CCPA 等)的责任。详见 DISCLAIMER.md