QueryForge
一款本地 CLI 应用程序,用于根据已知值构建结构化的 OSINT 搜索计划。
Русская версия
·
安装
·
用法
·
截图
·
模板
## 概述
QueryForge 可以将用户名、电子邮件地址、域名、公司名称、IP 地址或其他已知值转换为一系列用于公开数据源的搜索查询和直接链接。
该程序不会抓取网站,也不会判断搜索结果是否属于同一个人或组织。它负责准备可重复的搜索计划,按来源对查询进行分组,并将结果的审查工作留给调查人员。
其界面是完全交互式的。只需使用 `python main.py` 启动程序,通过数字选择菜单项并按 Enter 键即可。不需要使用任何命令行参数。
### 当前目录
| 组件 | 数量 |
|---|---:|
| 数据类型 | 19 |
| 公开来源 | 125 |
| 查询模板 | 711 |
| 搜索深度级别 | 3 |
| 导出格式 | 4 |
| 界面语言 | 2 |
### 主要功能
- 数字化终端菜单,无需方向键导航
- 俄语和英语界面
- 自动数值类型检测
- 基础、扩展和完全搜索深度
- 推荐、分组、全部或手动来源选择
- 直接在浏览器中打开一个或多个生成的查询
- 带有可配置开关的本地搜索历史
- 独立的 HTML 报告
- 支持 JSON、CSV 和 Markdown 导出
- 基于 YAML 的来源和实体目录
- 单独支持 Yandex Search、Images、Maps、News 和 Video
- 包含针对俄罗斯、乌克兰、白俄罗斯、哈萨克斯坦、乌兹别克斯坦、亚美尼亚、吉尔吉斯斯坦、格鲁吉亚和摩尔多瓦的公开数据源和注册机构
- QueryForge 本身不需要任何 API 密钥
## 截图
### 主菜单
主菜单被刻意设计得很简单:每个操作都有一个编号,输入选定的编号并按 Enter 确认。从这里你可以发起新的搜索、让 QueryForge 检测数值类型、重新打开之前的搜索、更改设置、检查来源目录或查看程序信息。该界面不需要鼠标输入或方向键导航。
### 数据类型选择
数据类型决定了使用哪些占位符、验证规则和查询模板。QueryForge 目前支持身份数据、组织、Web 基础设施、技术指标、文档、图像、位置和自由格式短语。每一项都展示了一个示例,以便在搜索开始前明确预期的输入格式。
### 生成的搜索计划
生成的查询会显示来源名称、用途、查询文本和直接链接。结果可以逐页查看、单独打开或作为选定分组打开。QueryForge 在显示之前会去除重复的来源/查询/链接组合,并在导出时保留原始的搜索深度和类别。
### HTML 报告
HTML 报告是一个包含内置 CSS 和 JavaScript 的独立文件。它可以在本地打开而无需服务器,也不会从 CDN 加载界面资源。该报告包含来源导航、文本搜索、按深度和类别筛选、可折叠的来源分组、复制按钮、直接链接、深色和浅色主题、响应式布局以及打印视图。
### 设置
设置通过相同的数字界面进行更改。可用选项包括语言、强调色、结果页面大小、默认搜索深度、默认来源模式、历史记录存储以及自动清屏。更改将在本地保存,并在下次启动时加载。
## 工作原理
1. 输入一个已知值或使用自动类型检测。
2. 选择数据类型。
3. 选择搜索深度。
4. 选择推荐来源、所有可用来源、某个来源分组或个别来源。
5. 检查生成的查询。
6. 在浏览器中打开选定的链接或保存报告。
```
Known value
│
├── Data type
├── Search depth
└── Source selection
│
▼
Query generation
│
├── Open in browser
├── HTML report
├── JSON
├── CSV
└── Markdown
```
### 搜索深度
| 级别 | 用途 |
|---|---|
| Basic | 用于初步检查的小型高信噪比集合 |
| Extended | 跨越更多来源类型的更广泛覆盖 |
| Full | 适用于选定实体和来源的所有可用模板 |
### 来源选择模式
| 模式 | 行为 |
|---|---|
| Recommended | 使用分配给选定数据类型的来源集合 |
| All available | 使用针对选定数据类型有模板的每一个来源 |
| Source group | 将搜索限制在某个特定类别,如档案、地图或代码 |
| Manual | 接受单独的来源编号和数字范围 |
## 支持的数据类型
| 领域 | 数据类型 |
|---|---|
| Identity | 用户名、电子邮件、人员、电话、Telegram 标识符、社交资料 |
| Organizations | 公司、品牌 |
| Web | 域名、URL |
| Technical | IP 地址、ASN、GitHub 仓库、哈希 |
| Other | 加密货币地址、文档、图像、位置、短语 |
自动检测可以识别结构化的值,如电子邮件地址、URL、域名、IP 地址、AS 编号、常见哈希、GitHub 仓库、Telegram 标识符以及多种加密货币地址格式。对于有歧义的值,始终可以手动指定。
## 来源目录
该目录分为 11 个来源分组。
| 分组 | 来源数 | 示例 |
|---|---:|---|
| 搜索引擎 | 11 | Google, Yandex, Bing, DuckDuckGo, Brave Search, Startpage |
| 图像搜索 | 5 | Google Images, Yandex Images, Bing Images, Google Lens |
| 新闻与媒体 | 4 | Google News, Yandex News, Bing News, GDELT |
| 代码与开发 | 6 | GitHub, GitLab, Sourcegraph, Codeberg, GitFlic |
| 社交与社区 | 22 | Reddit, VK, TGStat, Habr, Bluesky, LinkedIn |
| 档案 | 4 | Wayback Machine, Archive.today, Internet Archive, Arquivo.pt |
| 公司与注册机构 | 20 | OpenCorporates, Rusprofile, Companies House, GLEIF |
| 技术数据 | 19 | Shodan, Censys, VirusTotal, urlscan.io, RDAP.org |
| 包与出版物 | 19 | ORCID, Crossref, OpenAlex, PyPI, arXiv, PubMed |
| 地图 | 5 | Google Maps, Yandex Maps, 2GIS, OpenStreetMap |
| 区块链 | 10 | Etherscan, Blockchair, Solscan, Tronscan, BscScan |
完整来源列表
### 搜索引擎
Google, Bing, DuckDuckGo, Yandex, Brave Search, Startpage, Qwant, Mojeek, Ecosia, Yahoo Search 和 Rambler Search。
### 图像搜索
Google Images, Bing Images, Yandex Images, Wikimedia Commons 和 Google Lens。
### 新闻与媒体
Google News, Bing News, Yandex News 和 GDELT。
### 代码与开发
GitHub, GitLab, Sourcegraph, Codeberg, GitFlic 和 Bitbucket。
### 社交与社区
Reddit, YouTube, Medium, Stack Overflow, Gravatar, VK, Odnoklassniki, RUTUBE, TGStat, Habr, Pikabu, Bluesky, TikTok, Twitch, Flickr, SoundCloud, Pinterest, LinkedIn, Facebook, Keybase, Steam Community 和 Yandex Video。
### 档案
Wayback Machine, Archive.today, Internet Archive 和 Arquivo.pt。
### 公司与注册机构
OpenCorporates, OpenSanctions, Wikidata, Rusprofile, Checko, ЕГРЮЛ/ЕГРИП, ЕИС Закупки, YouControl, Opendatabot, Adata.kz, КГД Казахстана, Orginfo.uz, ЕГР Беларуси, UK Companies House, SEC EDGAR, GLEIF LEI Search, Armenia e-Register, Kyrgyzstan Legal Entities Register, Georgia Business Registry 和 Moldova Company Search。
### 技术数据
Shodan, Censys, urlscan.io, VirusTotal, AbuseIPDB, BGPView, crt.sh, ICANN Lookup, PeeringDB, AlienVault OTX, MalwareBazaar, RDAP.org, IPinfo, Hurricane Electric BGP Toolkit, Robtex, URLhaus, ThreatFox, Pulsedive 和 GreyNoise Visualizer。
### 包与出版物
ORCID, Crossref, Google Scholar, OpenAlex, npm, PyPI, Docker Hub, Hugging Face, crates.io, RubyGems, Packagist, Maven Central, PubMed, arXiv, Semantic Scholar, Research Organization Registry, WorldCat, VIAF 和 Google Patents。
### 地图
Google Maps, OpenStreetMap, Yandex Maps, 2GIS 和 Bing Maps。
### 区块链
Etherscan, Blockchair, Solscan, Tronscan, Tonviewer, Blockchain.com Explorer, BscScan, PolygonScan, Arbiscan 和 BaseScan。
### CIS 覆盖范围
QueryForge 包含针对区域性搜索引擎、社交平台、媒体网站、地图和商业注册机构的专用模板。该目录包括 Yandex 服务、VK、Odnoklassniki、TGStat、RUTUBE、Habr、Pikabu、2GIS、Rusprofile、Checko、ЕГРЮЛ/ЕГРИП、ЕИС Закупки、YouControl、Opendatabot、Adata.kz、КГД Казахстана、Orginfo.uz、ЕГР Беларуси 以及亚美尼亚、吉尔吉斯斯坦、格鲁吉亚和摩尔多瓦的公开注册机构。
某些政府门户网站不支持在 URL 中预填搜索值。对于这些服务,QueryForge 会打开正确的公开搜索页面,并在生成的报告中保留已准备好的值,以便手动输入。
请参阅 [CIS 来源说明](docs/CIS_SOURCES.md)和[来源审计说明](docs/SOURCE_AUDIT.md)。
## 安装
### 前置条件
- Python 3.10 或更高版本
- Git,或下载的仓库压缩包
- 支持 UTF-8 的终端
### Windows
```
git clone https://github.com/zakhar-git/QueryForge.git
cd QueryForge
python -m venv .venv
.venv\Scripts\activate
python -m pip install --upgrade pip
pip install -r requirements.txt
python main.py
```
### Linux 和 macOS
```
git clone https://github.com/zakhar-git/QueryForge.git
cd QueryForge
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
python main.py
```
在下载并解压仓库压缩包后,该程序也可以在不使用 Git 的情况下启动。
## 用法
在项目目录下启动 QueryForge:
```
python main.py
```
常规工作流程如下:
```
1. New search
2. Select a data type
3. Enter a value
4. Select depth
5. Select sources
6. Review or export the generated queries
```
自动检测可在主菜单中使用。它会提出一种或多种可能的数据类型,让你在继续之前确认正确的一项。
打开多个查询时,QueryForge 会将每批次限制为 10 个浏览器标签页,以避免不小心开启过多标签导致浏览器过载。
## HTML 报告
HTML 是主要的人类可读报告格式。
报告将保存至:
```
output/
```
典型的文件名如下所示:
```
domain_example.com_20260712_231530.html
```
每份报告包含:
- 搜索的值和选定的数据类型
- 搜索深度
- 创建时间
- 查询和来源计数
- 按来源划分的侧边栏导航
- 文本筛选
- 深度和类别筛选
- 可折叠的来源分组
- 查询复制按钮
- 指向公开服务的直接链接
- 深色和浅色主题
- 响应式移动布局
- 适合打印的输出
该报告是自包含的。它可以被移动、归档或在另一台计算机上打开,而无需安装 QueryForge。
### 其他导出格式
| 格式 | 用途 |
|---|---|
| JSON | 用于脚本和其他工具的结构化输出 |
| CSV | 电子表格导入和人工审核 |
| Markdown | 笔记、文档和案例文件 |
| HTML | 交互式本地报告 |
## 本地数据与隐私
QueryForge 将设置和历史记录保存在仓库之外。
### Windows
```
%USERPROFILE%\.queryforge\settings.json
%USERPROFILE%\.queryforge\history.json
```
### Linux 和 macOS
```
~/.queryforge/settings.json
~/.queryforge/history.json
```
历史记录最多可保存 100 次最近的搜索。它可以在界面中禁用或清除。删除 `settings.json` 会将程序重置为默认设置。删除 `history.json` 会清除已保存的历史记录。这两个文件在需要时都会自动重新创建。
可以使用环境变量更改存储位置:
```
QUERYFORGE_HOME
QUERYFORGE_OUTPUT
```
Windows 示例:
```
$env:QUERYFORGE_HOME = "D:\QueryForgeData"
$env:QUERYFORGE_OUTPUT = "D:\QueryForgeReports"
python main.py
```
Linux 或 macOS 示例:
```
export QUERYFORGE_HOME="$HOME/.local/share/queryforge"
export QUERYFORGE_OUTPUT="$HOME/Documents/QueryForgeReports"
python main.py
```
查询生成是在本地进行的。只有当你选择在浏览器中打开生成的链接时,QueryForge 才会将数据发送到外部服务。此时,搜索值会成为目标 URL 的一部分,并根据该服务自身的隐私政策进行处理。
## 扩展 QueryForge
来源目录和查询模板以 YAML 格式存储。可以在不更改菜单或导出代码的情况下添加新的来源和模板。
### 添加来源
编辑:
```
queryforge/data/sources.yaml
```
示例:
```
- id: example_search
name: Example Search
group: web
url_template: https://example.com/search?q={query}
```
可用的 URL 编码模式:
| 模式 | 行为 |
|---|---|
| `query` | 为 query-string 参数对值进行编码 |
| `` | 将值编码为 URL 路径组件 |
| `fragment` | 对 URL fragment 的值进行编码 |
| `raw` | 插入渲染后的查询,不进行编码 |
### 添加查询模板
编辑以下目录中的相关文件:
```
queryforge/data/entities/
```
示例:
```
- source: example_search
level: extended
title_en: Exact username
title_ru: Точный ник
query: '"{username}"'
category: identity
```
模板也可以定义一个完整的直接 URL:
```
- source: github
level: extended
title_en: GitHub user search
title_ru: Поиск пользователя GitHub
query: "{username}"
category: identity
url: https://github.com/search?q={username_q}&type=users
```
该引擎为用户名、电子邮件组件、域名、URL、电话号码数字、AS 编号、仓库、哈希以及其他受支持的实体提供了规范化的占位符。
编辑目录后,请在发起 pull request 之前运行测试。
## 项目结构
```
QueryForge/
├── .github/
│ └── workflows/
│ └── tests.yml
├── docs/
│ ├── CIS_SOURCES.md
│ └── SOURCE_AUDIT.md
├── output/
│ └── .gitkeep
├── photo/
│ ├── logo.png
│ ├── menu.png
│ ├── data_type.png
│ ├── search.png
│ ├── html_report.png
│ └── settings.png
├── queryforge/
│ ├── data/
│ │ ├── entities/
│ │ ├── report_template.html
│ │ └── sources.yaml
│ ├── app.py
│ ├── browser.py
│ ├── catalog.py
│ ├── config.py
│ ├── detection.py
│ ├── engine.py
│ ├── exporters.py
│ ├── history.py
│ ├── i18n.py
│ ├── menu.py
│ ├── models.py
│ ├── paths.py
│ ├── report.py
│ └── ui.py
├── tests/
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── PROJECT_MAP.md
├── README.md
├── README_RU.md
├── main.py
├── requirements-dev.txt
└── requirements.txt
```
## 测试
安装开发依赖:
```
pip install -r requirements-dev.txt
```
运行测试套件:
```
pytest
```
测试涵盖了目录加载和验证、自动检测、查询渲染、菜单解析、导出器、CLI 流程以及仓库结构。
## 局限性
- QueryForge 只负责生成查询和链接,它并不验证搜索结果。
- 匹配的用户名、电子邮件、头像或组织名称并不能作为身份的证明。
- 搜索操作符和公开 URL 可能会随时间推移而改变。
- 外部服务可能需要登录、JavaScript、CAPTCHA 或区域访问权限。
- 某些服务提供了搜索表单,但不允许在 URL 中预填值。
- 完全深度的搜索可能会产生大量的浏览器链接;请在打开它们之前先检查生成的计划。
可以通过 GitHub Issues 报告损坏或已更改的来源。请附上来源名称、生成的 URL 以及预期行为。
## 负责任地使用
仅出于合法处理公开信息的目的使用 QueryForge。请尊重隐私、当地法律以及你通过生成的链接所打开服务的条款。
QueryForge 不能确权、识别身份或意图。结论应基于来自独立来源的已审查证据,而不是单一的搜索结果。
## 贡献
欢迎提交有关新的公开数据源、更正后的 URL、区域注册机构、翻译和查询模板的 Pull requests。
在提交更改之前:
1. 确保来源公开可访问。
2. 确认生成的 URL 能打开预期的搜索页面。
3. 使用清晰的英语和俄语模板标题。
4. 避免重复的来源/查询/链接组合。
5. 运行 `pytest`。
6. 在添加新的来源分组或数据类型时更新文档。
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解仓库准则。
## 许可证
QueryForge 采用 [MIT 许可证](LICENSE)发布。