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, 动态插桩, 安全插件, 实时处理, 指纹识别, 无服务器架构, 特征检测, 网站技术识别, 自动化攻击