WhatWeb — 网站技术栈识别
Python 版网站技术指纹识别工具,功能类似 Wappalyzer / WhatWeb(Ruby),纯标准库实现,无需任何外部依赖。
能检测什么
| 类别 | 检测项 |
|---|---|
| 服务器 / 中间件 | nginx、Apache、IIS、LiteSpeed、Cloudflare、Caddy、Tomcat、OpenResty、Tengine、Jetty、Gunicorn、uWSGI、Waitress、Go、Node.js |
| 后端语言 / 框架 | PHP、ASP.NET、Express、Next.js、Koa、Flask、Django、Laravel、Slim、Phalcon |
| 前端框架 / SSG | React、Vue.js、Angular、Next.js、Nuxt.js、Gatsby、UmiJS、Ant Design Pro、Svelte、Astro、Remix、Eleventy、Hexo、Hugo、Django、Laravel、Ruby on Rails、Spring Boot、ASP.NET、CodeIgniter、Symfony |
| JS 库 | jQuery、jQuery UI、React、Vue.js、Angular、Bootstrap、D3.js、Lodash、Moment.js、Axios、Chart.js、Three.js、GSAP、Swiper、AOS、Anime.js、Popper.js、Tippy.js、SweetAlert、Select2、DataTables |
| CMS / 平台 | WordPress、Drupal、Joomla、Shopify、Wix、Squarespace、Ghost、Hexo、Hugo、Gatsby、Jekyll、Nuxt、Next.js、Typo3、Contao、WooCommerce、Magento、BigCommerce、PrestaShop、OpenCart、Salesforce Commerce |
| 分析 / 追踪 | Google Analytics、Google Tag Manager、百度统计、CNZZ、腾讯分析、Umeng+、Hotjar、Mixpanel、Segment、Matomo、Plausible、Umami、Simple Analytics、Clarity |
| CDN | Cloudflare、jsDelivr、CDNJS、BootCDN、UNPKG、Akamai、Fastly、Azure CDN、AWS CloudFront、Bunny CDN、腾讯云 CDN、阿里云 CDN、百度 CDN |
| 安全 / 防护 | Cloudflare、reCAPTCHA、hCaptcha、Turnstile、Akamai Bot Manager、Imperva、Sucuri、Wordfence |
| 托管 / 云服务 | GitHub Pages、Netlify、Vercel、Render、Cloudflare Pages、Firebase、AWS、Azure、Google Cloud、阿里云、腾讯云 |
| JS 运行时 / 构建工具 | Webpack、Vite、Parcel、Rollup、Esbuild、SWC、Babel、TypeScript |
使用方法
基本用法
python whatweb.py <URL>
多个 URL
python whatweb.py https://example1.com https://example2.com
输出 JSON 格式
python whatweb.py <URL> --json
详细模式(显示响应头)
python whatweb.py <URL> -v
设置超时时间
python whatweb.py <URL> -t 30
示例
# 检测百度
python whatweb.py https://www.baidu.com
# 检测淘宝(JSON 输出)
python whatweb.py https://www.taobao.com --json
# 不写协议头会自动补全 https://
python whatweb.py example.com
# 多站点扫描
python whatweb.py https://www.baidu.com https://www.taobao.com https://wordpress.org
# 详细模式
python whatweb.py https://www.baidu.com -v
输出说明
============================================================
WhatWeb — https://www.example.com
============================================================
扫描时间: 2026-06-04 15:48:17
【基本信息】
URL: https://www.example.com
状态码: 200
Title: Example Domain
【服务器 & 后端】
Server: nginx/1.18.0
X-Powered-By: PHP/7.4.0
【检测到的技术】
✓ nginx [Server]
✓ PHP [X-Powered-By]
✓ jQuery [JavaScript]
✓ React [Framework]
✓ Cloudflare [CDN]
【JavaScript 库】
- jQuery v3.6.0
【前端 / SSG 框架】
- React
【安全特性】
- HSTS
- CSP
- X-Frame-Options
============================================================
实现原理
- HTTP 头分析 — 解析
Server、X-Powered-By、Set-Cookie、Strict-Transport-Security等响应头 - Cookie 识别 — 通过 Cookie 名称推断后端框架(如
laravel_session→ Laravel),使用正则词边界匹配,避免子串误报 - HTML 解析 — 提取
<meta name="generator">、<title>、<script src>等标签 - 正则指纹匹配 — 对 JS 文件路径、HTML 内容做正则匹配,识别框架/库特征,全部使用
\b词边界防止误报 - 重定向处理 — 自动跟随 301/302 重定向,记录跳转链
扩展指纹库
编辑 whatweb.py 中的 FINGERPRINTS 字典,按现有格式添加新的检测规则:
FINGERPRINTS = {
"js_libraries": {
"YourLibrary": [r"your-lib[.-](\d+\.\d+(\.\d+)?)"],
},
# ... 其他类别
}
指纹规则编写指南
- 使用原始字符串
r"..."编写正则,避免转义问题 - 加词边界
\b防止子串误报(如\bMage\b不会匹配image) - 版本捕获 用括号分组
(\d+\.\d+(\.\d+)?)提取版本号 - 多模式 每个类别下提供多个识别模式,提高覆盖率
- 测试验证 添加新规则后务必用目标站点验证,避免误报
文件说明
| 文件 | 说明 |
|---|---|
whatweb.py |
主程序,纯 Python 标准库,零依赖 |
SKILL.md |
本文件 |
技术细节
- 纯标准库:
urllib.request、http.client、ssl、re、json、HTMLParser - 超时控制:默认 15 秒,可通过
-t参数调整 - SSL 处理:自动跳过证书验证(方便内网/测试环境扫描)
- 编码处理:优先 UTF-8,失败则 fallback 到 latin-1
- 错误处理:HTTP 错误状态码仍可读取响应内容进行分析
- 正则匹配:全部使用
re.search+re.IGNORECASE,支持大小写不敏感匹配 - 词边界:Cookie 和平台检测使用
\b词边界,避免子串误报
已知问题 / 限制
- 动态内容:单页应用(SPA)的核心内容由 JS 动态渲染,
urllib无法执行 JS,可能漏检 - 解决方案:接入无头浏览器(如 Playwright / Puppeteer)执行 JS 后分析
- CDN 混淆:部分站点通过 CDN 隐藏真实服务器,需结合
Via/X-Cache头综合判断 - 误报:部分短模式(如
r"vue")可能误报,已加\b词边界缓解 - 大文件超时:部分站点 HTML 过大(如 GitHub),需在超时时间内完成下载和分析
适用场景
- 竞品技术栈调研
- 安全评估前的资产指纹识别
- 网站迁移/重构前的现状摸底
- 学习研究(了解各网站用了什么技术)
- 批量扫描(结合
--json输出 + 脚本批处理)
License
MIT License