
OpenDoor 是一个开源 CLI 侦察平台,用于经授权的 Web 侦察、目录发现、子域名枚举、指纹识别、WAF 检测、绕过探测、响应过滤、报告生成、开放重定向检查、受限爬取以及基于传输的扫描工作流。
它帮助安全研究人员、渗透测试人员、漏洞赏金猎人、DevSecOps 工程师和开发人员识别暴露的路径、登录面板、目录列表、受限资源、备份文件、Web Shell、子域名以及其他可能敏感的 Web 资产。
仅在您拥有或已获得明确测试许可的系统上使用 OpenDoor。
--fingerprint 中进行被动隐私风险检查,包括可能的 HSTS、ETag/缓存和超级 Cookie 暴露面。401 和 403 资源进行受控的请求头和路径绕过探测;它专为那些仅靠速度不够的真实目标而设计:WAF、CDN、软 404 页面、通配符路由、受限资源、认证区域、不稳定网络、多目标批次以及受传输控制的扫描。 自 2016 年首次发布至今,OpenDoor 发生了巨大变化,从原始的暴力破解工具发展为新的自适应发现框架,变得对 DevOps 和 QA 友好。 OpenDoor 专注于上下文感知发现,而非盲目枚举。
OpenDoor 包含一个启发式指纹引擎,用于检测可能的应用程序栈、CMS 平台、框架、网站构建器、静态站点工具、基础设施提供商、HSTS / preload 就绪状态以及 WAF / 反机器人系统。
支持技术的完整列表: 指纹识别技术
运行指纹检测:```bash opendoor --host https://example.com --fingerprint
在指纹识别阶段完成后,OpenDoor 会在字典枚举开始前打印一份简洁的预扫描摘要:```text
Fingerprint result: cms/WordPress (95%)
Web stack: WordPress | PHP | Cloudflare
Security posture: HSTS preload-ready
Read more:
推荐给大多数 CLI 用户:```bash pipx install opendoor
### pip```bash
python3 -m pip install --upgrade opendoor
OpenDoor 可从 Chocolatey 社区包存储库获取:```powershell choco install opendoor -y
Chocolatey 软件包可能会在社区审核完成前滞后于 GitHub/PyPI 的最新版本。
### Arch Linux / AUR
OpenDoor 可在 Arch 用户软件仓库中获取:```bash
yay -S opendoor
OpenDoor 也可通过 Brew 包管理器获取:```bash brew install opendoor
### Docker
OpenDoor 可通过 GitHub Container Registry 以官方项目 Docker 镜像的形式获取。```bash
docker pull ghcr.io/stanislav-web/opendoor:latest
docker run --rm -it ghcr.io/stanislav-web/opendoor:latest --version
运行扫描并将报告写入主机:```bash mkdir -p reports
docker run --rm
-v "$PWD/reports:/work/reports"
ghcr.io/stanislav-web/opendoor:latest
--host https://example.com
--reports json,html
--reports-dir reports
### BlackArch Linux
OpenDoor 在 BlackArch Linux 中可用:```bash
sudo pacman -Syu
sudo pacman -S opendoor
git clone https://github.com/stanislav-web/OpenDoor.git cd OpenDoor
python3 -m pip install -r requirements.txt python3 opendoor.py --help
查看完整的[安装指南](https://opendoor.readthedocs.io/Installation-and-update/)。
---
## 🚀 快速使用
### 基础目录扫描```bash
opendoor --host https://example.com
opendoor --host https://example.com --crawl
`--crawl` 是选择加入的,且仅适用于目录扫描。它使用 `GET`,从已扫描的响应中提取保守的 HTML 属性,仅保留同源 URL,遵循被忽略的扩展名,跳过 POST 表单和外部来源,并通过正常的结果桶报告发现的 URL。
### 子域扫描```bash
opendoor --host example.com --scan subdomains
opendoor --hostlist targets.txt
目标文件可能混用 URL、域名、IPv4 地址、IPv4 CIDR 块和包含式 IPv4 范围:```text
https://example.com
app.example.com
192.168.1.10
192.168.1.0/24
192.168.1.10-192.168.1.50
cat targets.txt | opendoor --stdin
通过 STDIN 也支持相同的混合目标格式。
### 低噪声扫描```bash
opendoor \
--host https://example.com \
--method GET \
--auto-calibrate \
--include-status 200-299,301,302,403 \
--exclude-status 404,429,500-599 \
--exclude-size-range 0-256 \
--sniff endpoint,secret,shadow,openredirect,malware,skipempty,collation,indexof,file,stacktrace \
--reports std,json,csv,sarif
响应嗅探器在发现过程中对有趣的响应体进行分类。当状态码和大小不足以理解所发现的内容时,它们非常有用。```bash
opendoor
--host https://example.com
--method GET
--sniff endpoint,secret,shadow,openredirect,malware,stacktrace,indexof,file,collation
--reports std,json,csv,html,sqlite,sarif
Useful sniffers include:
| Sniffer | Purpose |
|---------------------|-------------------------------------------------------------------------------------------------------------------------------------|
| `indexof` | 检测目录列表页面。 |
| `file` | 检测已知的敏感文件暴露模式。 |
| `collation` | 检测重复或类似重定向的回退响应,这些响应可能产生误报。 |
| `skipempty` | 跳过空响应。 |
| `skipsizes=46` | 跳过具有确切已知干扰大小的响应。 |
| `skipsizes=46:1024` | 跳过处于干扰大小范围内的响应。 |
| `stacktrace` | 检测暴露的调试/运行时堆栈跟踪和内部错误详细信息。 |
| `secret` | 检测可能暴露的 API 密钥、令牌、私钥和凭据,并提供经过脱敏处理的报告元数据。 |
| `shadow` | 主动探测已确认的 `200 OK` 类文件命中,查找有界的备份/影子变体,例如 `.bak`、`.old` 和路径模板。 |
| `openredirect` | 使用受控的标记 URL 主动验证类似重定向的查询参数,并仅报告已确认的开放重定向漏洞。 |
| `endpoint` | 从已获取的响应中被动检测客户端暴露的 WebSocket、Socket.IO、SSE/EventSource 和 AJAX 端点。 |
| `malware` | 检测可能的恶意内容、Webshell 标记、注入脚本或混淆的有效负载。 |
Body-dependent sniffers automatically force `GET` internally when the configured method is `HEAD`.
Read more: [Sniffers reference](https://opendoor.readthedocs.io/Sniffers/)
### Authenticated scan from raw request```bash
opendoor \
--raw-request request.txt \
--scheme https \
--method GET \
--auto-calibrate \
--reports json,html,sqlite,sarif
opendoor
--host https://example.com
--waf-safe-mode
--timeout 60
--retries 5
--delay 0.5
### 容错扫描
针对不稳定的目标、缓慢的网络、临时的 WAF 拦截、代理不稳定或长时间运行的授权扫描,使用更保守的运行时配置文件。```bash
opendoor \
--host https://example.com \
--method GET \
--timeout 60 \
--retries 5 \
--retries-fail-streak 25 \
--auto-calibrate \
--waf-detect \
--waf-guard \
--session-save session.json \
--reports std,json,html
此配置文件通过增加每次请求的超时时间和重试容错、仅在重复耗尽路径时限制中止、使用自动校准过滤软404和全能响应、当WAF拦截响应占主导时停止低价值扫描,并保存检查点状态以便稍后恢复,从而使扫描更具弹性。
稍后恢复扫描:```bash opendoor --session-load session.json
在主动扫描期间,按一次 `Ctrl+C` 暂停工作线程,然后选择 `C` 继续或 `E` 中止。
### 标头与路径绕过探测
仅在你获授权测试的系统上使用此功能。该功能为可选启用,会使用受控的临时标头和安全的路径变体来探测被阻止的资源。```bash
opendoor \
--host https://example.com \
--method GET \
--waf-detect \
--header-bypass \
--header-bypass-limit 32 \
--reports std,json,csv,sarif,sqlite
当启用 --header-bypass 时,OpenDoor 首先尝试配置的标头注入变体,然后尝试安全的路径操作变体,例如尾斜杠、点段、分号后缀、大小写变体和 URL 编码段。
自定义触发状态、可信 IP 值和标头:```bash
opendoor
--host https://example.com
--method GET
--header-bypass
--header-bypass-status 401,403
--header-bypass-ips 127.0.0.1,10.0.0.1
--header-bypass-headers X-Original-URL,X-Rewrite-URL,X-Forwarded-For,X-Real-IP
--reports json,html,sqlite,sarif,csv
### 代理路由
使用单个显式代理:```bash
opendoor --host https://example.com --proxy socks5://127.0.0.1:9050
使用内置的轮换代理池:```bash opendoor --host https://example.com --proxy-pool
使用自定义轮换代理列表:```bash
opendoor --host https://example.com --proxy-list proxies.txt
opendoor
--host https://example.com
--transport openvpn
--transport-profile ./profile.ovpn
如果 OpenVPN 安装在 `PATH` 之外,请显式传递后端:```bash
opendoor \
--host https://example.com \
--transport openvpn \
--transport-profile ./profile.ovpn \
--transport-bin /opt/homebrew/sbin/openvpn
在 Windows 上,--transport-bin 可以指向 C:\Program Files\OpenVPN\bin\openvpn.exe。如果 GUI 客户端或企业 VPN 代理已经占用了隧道,请在 OpenDoor 外部启动该 VPN,并以直接模式运行 OpenDoor。
opendoor
--host https://example.com
--transport wireguard
--transport-profile ./profile.conf
更多示例:
- [基本扫描](https://opendoor.readthedocs.io/examples/basic-scans/)
- [批量扫描](https://opendoor.readthedocs.io/examples/batch-scans/)
- [认证扫描](https://opendoor.readthedocs.io/examples/authenticated-scans/)
- [WAF 规避扫描](https://opendoor.readthedocs.io/examples/waf-safe-scans/)
- [Header 绕过扫描](https://opendoor.readthedocs.io/examples/header-bypass-scans/)
- [VPN 传输扫描](https://opendoor.readthedocs.io/examples/vpn-transport-scans/)
- [CI/CD 示例](https://opendoor.readthedocs.io/examples/ci-cd/)
---
### 差异报告对比
OpenDoor 可以不运行新扫描,仅比较两份先前/当前报告。当你希望查看两次授权扫描结果之间出现了什么、消失了什么或发生了什么变化时,可以使用此功能。
支持的输入配对仅为 SQLite 到 SQLite 和 JSON 到 JSON。混合格式、文件缺失、无效报告和不支持的报告类型都会以优雅的验证错误告终。```bash
opendoor --diff reports/baseline/example.com.sqlite:reports/current/example.com.sqlite --reports std,json
opendoor --diff reports/baseline/example.com.json:reports/current/example.com.json --reports std,json --reports-dir ./diff
OpenDoor 可以将发现结果导出为 SARIF 2.1.0,用于 GitHub Code Scanning 和兼容 SARIF 的安全流水线。```bash
opendoor
--host https://example.com
--reports sarif,json
--reports-dir ./reports
GitHub Actions 上传示例:```yaml
- name: Upload OpenDoor SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: reports/example.com/example.com.sarif
category: opendoor
动手实践文章系列,通过可复现、已授权的 Web 侦察工作流学习 OpenDoor。

完整文档可在 ReadTheDocs 上获取:
安装开发依赖:```bash python3 -m venv .venv source .venv/bin/activate
python -m pip install --upgrade pip setuptools wheel python -m pip install -r requirements-dev.txt python -m pip install -e .
运行测试:```bash
python -m unittest
运行覆盖率:```bash coverage run -m unittest discover -s tests -p "test_*.py" coverage report -m
构建文档:```bash
python3 -m venv .docs-venv
source .docs-venv/bin/activate
python -m pip install -r docs/requirements.txt
python -m mkdocs build --strict
构建包工件:```bash python -m build
请参阅完整的[测试指南](https://opendoor.readthedocs.io/Testing/)和[贡献指南](https://opendoor.readthedocs.io/Contribution/)。
---
## 🔐 安全与机密卫生
切勿提交真实机密或私有传输配置文件。
切勿发布:
- 真实的 OpenVPN 配置文件;
- WireGuard 私钥;
- mTLS 客户端证书和私钥;
- auth-user-pass 文件;
- Cookie;
- Bearer 令牌;
- 客户目标列表;
- 私有扫描报告;
- 敏感的 CI 制品。
仅使用占位符示例。
---
## ⚖️ 负责任使用
OpenDoor 是一款安全测试工具。
请仅对您拥有或已获得明确测试许可的系统使用。
WAF 检测、WAF 安全扫描、原始请求重放、传输配置文件以及 Header Injection Bypass 探针等功能,旨在用于授权安全测试、防御性验证和暴露面回归检查。
本项目不授予对第三方系统、组织、商业服务或公共基础设施进行未经授权扫描的许可。
---
## 🧾 更新日志
参见 [CHANGELOG.md](https://github.com/stanislav-web/opendoor/blob/HEAD/CHANGELOG.md) 和 [GitHub Releases](https://github.com/stanislav-web/OpenDoor/releases)。
---
## 🤝 贡献
欢迎提交 Pull Request。
在贡献之前,请阅读[贡献指南](https://opendoor.readthedocs.io/Contribution/)并运行相关测试。
OpenDoor 通过代码贡献、文档更新、测试、问题报告、安全反馈、功能建议和社区验证不断改进。
感谢每一位帮助改进本项目的人。
[](https://github.com/stanislav-web/OpenDoor/graphs/contributors)
---
## 📄 许可证
OpenDoor 仅以 GNU 通用公共许可证 v3.0 发布。
参见 [LICENSE](https://github.com/stanislav-web/opendoor/blob/HEAD/LICENSE)。
---
## 支持
如果 OpenDoor 对您的授权安全工作有所帮助,您可以通过 Giveth 支持项目的持续维护。
[在 Giveth 上支持 OpenDoor](https://giveth.io/project/opendoor)
---
[](https://deepwiki.com/stanislav-web/OpenDoor) [](https://www.gnu.org/licenses/gpl-3.0)
| 平台 | Python 3.12 | Python 3.13 | Python 3.14 |
|---|
| Linux | |||
| macOS | |||
| Windows |
| 能力 | 为什么重要 |
|---|
| 指纹优先扫描 | OpenDoor 可以在更深入的发现之前识别可能的 CMS 平台、框架、基础设施提供商和 WAF 信号。这有助于您在了解上下文的情况下进行扫描,而不是盲目地向目标抛出通用字典。 |
| WAF 感知行为 | OpenDoor 可以检测可能的 WAF / 反机器人行为,并通过 --waf-safe-mode 切换到更安全的运行时配置,减少嘈杂的被阻止扫描,并让防御性响应更易于理解。 |
| WAF 防护停止条件 | 当初始分类响应绝大多数被 WAF 阻止时,OpenDoor 可以提前停止扫描。这避免了在只会反复产生边缘/WAF 阻止页面的字典上长时间运行。 |
| 受控绕过证据 | OpenDoor 可以选择性地使用受控的请求头注入和路径操纵变体来探测被阻止的 401 和 403 资源。它会记录精确的证据,如绕过类型、请求头或路径变体、探测值、原始状态码和最终状态码,而不会修改全局扫描请求头。 |
| 多信号自动校准 | OpenDoor 不仅仅依赖状态码或响应大小。它会比较多重响应信号,例如正文哈希、可见文本、语义软 404 短语、DOM 令牌结构、标题、重定向、稳定请求头、字数、行数、文本密度、归一化动态令牌和 DNS 通配符基线,以减少软 404 和通配符误报。 |
| 受限同源爬取 | --crawl 可以使用在已扫描的 HTML 响应中发现的单跳同源链接来丰富目录扫描。它使用现有的扫描管道、全局请求去重、按桶报告去重以及受限的内存上限,而不会变成蜘蛛或浏览器渲染器。 |
| 启发式嗅探器插件系统 | OpenDoor 包含一个可插拔的响应分析层,用于启发式嗅探器,如机密、堆栈跟踪、目录列表、恶意软件指标、卷影副本、可疑文件、开放重定向和重复的软错误模板。这让扫描可以从响应正文中浮现有意义的证据,而不仅仅报告状态码和大小。 |
| 传输级工作流 | OpenDoor 支持直接、代理、OpenVPN 和 WireGuard 传输模式。它还可以在授权的批量扫描中按目标轮换传输配置,这与在运行扫描器之前手动启动 VPN 不同。 |
| 代理池支持 | OpenDoor 可以通过 --proxy-list 使用代理池,在扫描前验证可用代理,并在活动代理池中轮换请求。这有助于长时间授权的扫描在不稳定的路由上存活,而无需硬编码单个代理端点。 |
| 容错扫描运行时 | OpenDoor 旨在让扫描在不稳定目标和不可靠网络上保持有用。它结合了请求重试、连续失败保护、可恢复的传输错误处理、代理轮换、WAF 感知停止条件、检查点会话和交互式暂停/恢复控制,使长时间扫描能够安全失败,而不是静默丢失覆盖范围。 |
| 可恢复的长时间扫描 | OpenDoor 可以保存扫描检查点并在之后恢复。当扫描因崩溃、不稳定网络、路由被阻止、终端断开或长时间多目标任务而中断时,这一点非常重要。 |
| 运行时暂停/恢复 | 在扫描过程中按一次 Ctrl+C 即可暂停工作线程,然后选择 C 继续或 E 中止,无需涉及会话文件。 |
| 差异报告比较 | OpenDoor 可以使用 --diff old:new 比较先前和当前的 SQLite/JSON 报告,显示新增、移除和更改的发现,而无需重新扫描目标。这使扫描报告成为版本到版本的暴露回归检查。 |
| CI/CD 就绪结果 | 仅当找到选定的结果桶时,OpenDoor 才会返回失败退出码,使其无需自定义后处理脚本即可用作发布门禁或暴露回归检查。 |
| 可审计工程 | OpenDoor 通过多平台 CI、覆盖检查、包检查、文档构建和大型单元测试套件进行维护,使其更易于审计、贡献和依赖。 |
| 类别 | 示例 |
|---|
| CMS | WordPress、Drupal、Joomla、TYPO3、GravCMS、Open Journal Systems、InstantCMS、DiafanCMS、CMS.S3 / Megagroup、Discuz!、NetCat |
| 电子商务 | Magento、WooCommerce、Shopify、PrestaShop、OpenCart、Shopware、Webasyst / Shop-Script |
| 框架 / 应用平台 | Laravel、Symfony、Django、Flask、FastAPI、Express、NestJS、Next.js、Nuxt、Rails、Spring |
| 运行时 / 语言栈 | PHP、Node.js、JavaScript、Python、Ruby、.NET、Java/JVM、Elixir、静态站点目标 |
| 网站构建器 | Wix、Webflow、Squarespace、Tilda、Duda、Hostinger Website Builder |
| 静态 / 文档生成器 | MkDocs、Docusaurus、Hugo、Jekyll、VitePress |
| 基础设施 / 托管 | Cloudflare、AWS、Vercel、Netlify、GitHub Pages、GitLab Pages、Heroku、Azure、Google Cloud、Fastly、Akamai、Hostinger、DDoS-Guard、Tencent Cloud |
| 基础设施 / 服务器 | Nginx、Apache HTTP Server、Microsoft IIS、Caddy、LiteSpeed、lighttpd、Tornado、Gunicorn、Uvicorn、Hypercorn、Waitress、Apache Tomcat、Eclipse Jetty、Envoy、Traefik |
| WAF / 反机器人 | Cloudflare、AWS WAF、Azure Front Door、Akamai、Imperva、Sucuri、ModSecurity、DataDome、Kasada、BunkerWeb、F5 BIG-IP ASM |
| 安全响应头 | HSTS 存在性、max-age、includeSubDomains、preload 指令、本地 preload 就绪状态 |