Houseofmvps/opentechalyzer
GitHub: Houseofmvps/opentechalyzer
一款免费开源的网站技术栈检测工具,通过 CLI、库和 MCP 协议全面识别网站背后的技术信息。
Stars: 0 | Forks: 0
# Opentechalyzer
**免费、开源的网站技术检测工具。无需订阅,无需 API key,无需按次查询消耗积分。**
将其指向任何 URL,它就会告诉你该网站是用什么构建的:平台、框架、后端、
托管、CDN、支付处理商、分析工具、所有已安装的 Shopify 应用等等。接着,它提供
的信息远不止技术栈列表:联系详情、社交媒体账号、TLS 状态、预估的软件
支出、已知的 CVE、子域名以及随时间推移的技术变化。
它可以作为 **CLI**、**TypeScript 库**以及 **MCP server** 运行,因此 Claude、Claude Code、
Codex、ChatGPT、Cursor 以及任何其他 MCP 客户端都可以直接使用其所有功能。
```
npx opentechalyzer stripe.com
```
## 为什么会有这个项目
商业技术检测服务将最有用的部分隐藏在商业版背后,并通过积分来计量
每次查询。然而,检测本身并非最难的环节:它只是对任何 HTTP 客户端
都能收集到的信号进行模式匹配。你真正在为之付费的是指纹数据库
和托管式爬取服务。
因此,本项目提供了一个基于 MIT 许可证的指纹数据库,收集了比
商业工具**更广泛的信号集**,并完全免费地提供给你所有这些功能。在付费服务确实
领先的地方,[会明确说明](#what-this-cannot-do),而不是一笔带过。
## 安装
```
npm install -g opentechalyzer
```
或者直接运行,无需安装:
```
npx opentechalyzer example.com
```
两个可选附加组件可解锁更多功能。两者均提供一次性的免费使用:
```
npm i playwright && npx playwright install chromium
```
```
opentechalyzer db import && opentechalyzer db import-tranco
```
- **Playwright** 启用了 `--render` 参数,这大约能使检测结果翻倍。标签管理器、注入的
小组件和框架全局变量只有在 JavaScript 执行后才会存在。
- **`db import`** 合并社区维护的指纹数据集,以实现对长尾技术的覆盖。**`db import-tranco`**
启用基于免费的 Tranco 研究列表的流量排名功能。
## 在 Claude、Claude Code、Codex 或 ChatGPT 中使用
Opentechalyzer 支持 MCP 协议,因此任何 MCP 客户端都能获取全部十种工具。
**Claude Code**
```
claude mcp add opentechalyzer -- npx -y opentechalyzer-mcp
```
**Claude Desktop**,在 `claude_desktop_config.json` 中配置:
```
{
"mcpServers": {
"opentechalyzer": {
"command": "npx",
"args": ["-y", "opentechalyzer-mcp"]
}
}
}
```
**Codex CLI**,在 `~/.codex/config.toml` 中配置:
```
[mcp_servers.opentechalyzer]
command = "npx"
args = ["-y", "opentechalyzer-mcp"]
```
**Cursor、Windsurf、Zed 和 ChatGPT Developer Mode** 都可以在各自的
MCP 配置中使用相同的 command/args 参数对。该服务器在 stdio 上运行,无需任何凭证。
接下来只需直接提问即可:
### 通过 MCP 暴露的工具
| 工具 | 功能 |
| --- | --- |
| `detect_tech_stack` | 获取单个 URL 的完整技术栈,包含每次检测的置信度和证据 |
| `detect_tech_stack_batch` | 最多并发处理 25 个 URL — 批量查询 |
| `compare_tech_stacks` | 对比两个网站,并将其差异分为共有 / 仅 A 有 / 仅 B 有 |
| `tech_stack_report` | 生成完整的 markdown 报告,可直接粘贴到文档中 |
| `find_subdomains` | 通过证书透明度 + DNS 发现子域名 |
| `verify_email` | 无需发送任何内容即可进行 SMTP 邮箱验证 |
| `find_vulnerabilities` | 进行 CPE 映射,并实时在 NVD 中查询 CVE |
| `track_tech_changes` | 与存储的基线进行 diff 对比,以捕捉技术栈变化 |
| `opentechalyzer_status` | 查看当前可用的功能和数据集 |
| `import_external_database` | 引入可选的更广泛的指纹数据集 |
## CLI
```
ota example.com # quick scan
ota example.com --render --crawl --fields all -v # everything
ota example.com -f json > stack.json
ota -i domains.txt -f csv -j 10 > stacks.csv # bulk lookup
ota example.com --only cms,payment,analytics
ota subdomains example.com
ota verify sales@example.com
ota cve example.com
ota watch example.com # run on a cron for change alerts
```
`ota` 是 `opentechalyzer` 的简短别名。运行 `ota --help` 查看完整的参数列表。
### 批量查询
将文件中每行放置一个域名,并选择一个并发数:
```
ota -i domains.txt -f csv -j 10 --fields contact,social,signals > enriched.csv
```
CSV 中每个 URL 的每项技术占一行,包含版本、账户 ID 和置信度。失败情况会
按 URL 在 stderr 中报告,因此哪怕遇到一个无效主机,也绝不会中断数千条数据的批量处理。
## 库
```
import { analyze } from 'opentechalyzer';
const result = await analyze('https://example.com', {
render: true,
crawl: 5,
sourcemaps: true,
fields: ['contact', 'social', 'security', 'signals'],
});
for (const tech of result.detections) {
console.log(tech.name, tech.version ?? '', `${tech.confidence}%`, tech.evidence[0]?.match);
}
```
## 检测内容
涵盖 60 个类别的 **502 个内置指纹**,以及可选外部数据集添加的任何内容。
- **平台和 CMS** — Shopify、WordPress、Wix、Squarespace、Webflow、Ghost、Drupal、Magento、
BigCommerce、Salesforce Commerce Cloud、AEM、Sitecore、Contentful、Sanity、Framer、Odoo 等
- **框架** — Next.js、Nuxt、Remix、SvelteKit、Astro、Gatsby、React、Vue、Angular、Svelte、
Qwik、Solid、htmx、Alpine、Rails、Django、Laravel、Spring、ASP.NET、Phoenix、FastAPI
- **基础设施** — Cloudflare、Vercel、Netlify、Fastly、CloudFront、Akamai、Fly.io、Railway、
Render、nginx、Apache、IIS、LiteSpeed、Caddy,以及通过 DNS 记录获取的 DNS 托管商和邮件服务提供商
- **电商应用生态系统** — Shopify 的应用区块通过其 extension handle 进行枚举,这
是列出商店已安装应用的最可靠方法:Judge.me、Yotpo、Recharge、Klaviyo、
Gorgias、BOGOS、Rebuy、Loop、Smile.io、GoKwik、Shiprocket、AfterShip 等等
- **其他所有内容** — 支付、身份验证、分析、广告像素、支持小组件、搜索、APM、feature
flags、A/B 测试、同意管理工具、CAPTCHAs、机器人防护、CSS/UI 框架、JS 库、
字体、媒体和地图
同时还会提取账户 ID,因此你会得到 `GTM-M92FB6B`、`G-MFK23BV2BG` 或 Klaviyo 公钥,
而不是仅仅一句“检测到了 Google Tag Manager”。
## 工作原理
九种信号源,与指纹数据库进行匹配:
| 来源 | 捕获内容 |
| --- | --- |
| 响应头 | 服务器、框架、托管、CDN、缓存层 |
| Cookies | 框架的 session 名称 — 几乎是唯一的且难以伪造 |
| HTML 和 meta | 生成器、静态资源路径约定、内联标记 |
| 渲染后的 DOM 和 JS 全局变量 | 加载后注入的所有内容 *(需要 `--render`)* |
| 运行时的网络请求 | 永远不会出现在 DOM 中的 Beacons 和 API |
| 第一方 CSS | CSS 框架,从编译后的输出中提取,而非依赖类名 |
| Sourcemaps 和 bundles | 精确的 npm 依赖项名称和版本 |
| DNS 记录 | 邮件提供商、DNS 托管商,以及包含在 SPF 记录中的 SaaS |
| Well-known 探测和 favicon hash | 无客户端指纹的自托管软件 |
有三个设计决策值得了解,因为它们是准确性的真正来源:
**置信度是按概率合并的,而不是简单相加。** 每个信号都有一个可靠性,
总体置信度计算公式为 `1 - Π(1 - reliability)`。来自*同一*来源的重复匹配会被抑制,
因此针对同一个库的十个 HTML 正则表达式不能伪装成十个独立的观测值。简单相加
只要加上足够多的弱匹配,就会轻易达到 100% 饱和,这正是那些检测器最终
给出错误却无比自信结果的原因。
**CSS 框架是从编译后的 CSS 中检测出来的,而不是类名。** `flex items-center` 看起来像
Tailwind,但任何代码库都可以定义这些名字。因此,Opentechalyzer 会下载第一方
样式表,并寻找 `--tw-*` 和 `--bs-*` 自定义属性,只有当
框架本身生成了该文件时,这些属性才会存在。
**每次检测都附带其证据。** `--verbose` 会准确显示是哪个 header、cookie、选择器
或依赖项触发了每个结果。一个你无法审计的结果就是一个你无法信任的结果。
## 无法做到的事情
坦白说明这些限制,因为一个夸大其词的检测器比无用更糟糕。
- **后端在很大程度上是不可见的。** 一个纯粹的提供 JSON 的 Go 或 Rails API 不会留下任何指纹。当
它通过 header、cookie 或错误页面泄漏出来时,我们会报告后端信息,否则将保持沉默。
对于真实的后端情报,请阅读目标公司的招聘信息。
- **没有反向查询功能。** 你不能要求“列出所有使用 Shopify 的网站”。这需要针对数亿
个域名进行网络级的爬取,这确实是付费服务拥有而
本工具没有的一点。为此,请查询 BigQuery 上免费的 [HTTP Archive](https://httparchive.org/) 数据集,
这也是那些商业产品构建的基础。
- **没有公司或人员数据。** 员工人数、收入和组织架构图来自数据经纪人。
公司名称、位置和成立年份会在网站以结构化数据发布它们时被提取,
如果是推测出来的,会被标记为 `inferred`。
- **流量排名来自 Tranco**,这是一个免费的研究列表,而不是专有面板。
- **技术支出是下限估算,而不是账单。** 它对我们能够看到的付费工具的入门级标价
进行求和,以区分“业余爱好网站”和“购买软件的获资公司”。每个贡献的工具
都会被列出,以便你可以核对计算过程。
- **结果依赖于观测视角。** 地理位置重定向、设备定向和登录状态会改变
网站提供的内容。编写此工具的原因之一,就是发现从美国 IP 扫描返回的 Shopify
商店与从印度访问同一 URL 的结果完全不同。在信任
单次扫描结果之前,请检查多个观测点。
- **邮箱验证需要端口 25。** 大多数云网络会阻止端口 25 的出站连接,在这种情况下,验证
结果将是 `unknown`,而不是假阴性。使用 `--dns-only` 仅检查语法和 MX 记录。
- **全域接收域名无法被验证。** 如果一个域名接受所有地址,那么接收邮件
只能证明该域名有效,并不代表邮箱真实存在。这些会被报告为 `risky`,绝不会是 `safe`。
- **CVE 结果取决于版本的准确性。** 没有版本号的检测会被跳过,而不会与
有史以来发布的每个版本进行匹配。在根据 CVE 采取行动之前,请先确认版本。
## 指纹数据库与许可
`src/fingerprints/` 中的内置数据库是**专门为本项目编写并获得 MIT 许可**的。它
不是对任何其他人数据集的复制。
目前可用的最完整的开放数据集是社区维护的 Wappalyzer 技术集
([enthec/webappanalyzer](https://github.com/enthec/webappanalyzer)),它是 **GPL-3.0** 许可的。在这里直接内置
GPL-3.0 数据将迫使整个项目变成 GPL-3.0,从而阻止你将其嵌入到
你自己的产品中,而这正是本工具旨在提供的自由。因此,它永远不会被重新分发:
`opentechalyzer db import` 会根据*你的*请求将其获取到*你的*机器上,并保持其
原有的许可证。没有它,一切也都能正常工作。
## 开发
```
npm install && npm run build && npm test
```
## 许可证
MIT。可商业使用、嵌入、分支或转售。无需署名。
标签:C2日志可视化, MCP, MITM代理, TypeScript, 动态插桩, 安全插件, 实时处理, 指纹识别, 无服务器架构, 特征检测, 网站技术识别, 自动化攻击