OoO7ce/AssetProbe
GitHub: OoO7ce/AssetProbe
基于Playwright的Web资产发现与指纹识别工具,支持动态渲染、并发探测、自动截图和可视化报告生成。
Stars: 2 | Forks: 1
[简体中文](./README_CN.md) | English
# AssetProbe
[](https://www.npmjs.com/package/assetprobe)
[](https://www.npmjs.com/package/assetprobe)
[](https://nodejs.org)
[](LICENSE)
[](https://github.com/OoO7ce/AssetProbe)
Web 资产发现与侦查工具,支持批量处理、截图、HTML 报告生成以及 Web 应用指纹识别。
## 功能特性
- 🌐 **动态渲染**:基于 Playwright,能够渲染重度依赖 JavaScript 的网站(SPA、React、Vue、Angular)
- 🔄 **并发处理**:批量处理 URL,支持可配置的并发数(默认:5,范围:5-100)
- 📸 **网页截图**:捕获屏幕截图或整页截图
- 📊 **多格式报告**:自动生成 HTML 报告和 JSON 导出
- 🎯 **指纹识别**:识别 Web 应用、中间件和编程语言
## 使用场景
### 1. 资产发现与管理
- **内网扫描**:快速扫描 IP 段或域名列表以识别 Web 服务
- **资产分类**:通过网站标题快速识别系统类型
- **可视化归档**:通过截图直观记录当前网站状态
- **批量验证**:检查大量资产是否存活
### 2. 安全测试辅助
- **信息收集**:快速识别存活站点,收集标题和截图
- **端口扫描验证**:结合端口扫描结果验证 Web 服务
- **代理支持**:通过代理访问和测试不同的网络环境
- **目标筛选**:通过截图筛选高价值目标
### 3. 网站健康检查
- **批量监控**:定期检查关键网站状态
- **可用性报告**:生成显示监控结果的 HTML 报告
- **故障追踪**:统一标记“站点无法访问”
**核心价值**:
- ⚡ **高效**:并发处理比顺序处理快 10-50 倍
- 👁️ **可视化**:截图 + 标题比纯文本更直观
- 📊 **自动化**:批量处理 + 报告生成
## 安装说明
### 前置条件
- **Node.js** >= 18.0.0
- **npm** 或 **yarn**
### 方式 1:通过 npm 安装(推荐)
```
npm install -g assetprobe
```
安装完成后,直接使用 `assetprobe`:
```
assetprobe -u https://www.example.com
assetprobe -b urls.txt -c 10
```
### 方式 2:从源码安装
```
# 克隆项目
git clone https://github.com/OoO7ce/AssetProbe.git
cd AssetProbe
# 安装依赖(将自动下载 Chromium 浏览器)
npm install
# 运行
npm start -- -u https://www.example.com
# 或
node assetprobe.js -u https://www.example.com
```
**注意**:首次运行时会自动下载 Chromium 浏览器(约 300MB)。
## 使用方法
### 基础用法
```
# 查看帮助
assetprobe --help
# 访问单个网站
assetprobe -u https://www.example.com
# 使用代理访问
assetprobe -u https://www.example.com -p 127.0.0.1:7890
# 截图
assetprobe -u https://www.example.com -s
# 整页截图
assetprobe -u https://www.example.com -s -f
# 导出 JSON 到控制台
assetprobe -u https://www.example.com -j
# 保存 JSON 到文件
assetprobe -u https://www.example.com -j -o results.json
```
### 批量处理
```
# 批量处理 URL 列表
assetprobe -b urls.txt
# 批量处理并截图(自动生成 HTML 报告)
assetprobe -b urls.txt -s
# 批量处理并导出 JSON
assetprobe -b urls.txt -j
# 保存 JSON 到文件
assetprobe -b urls.txt -j -o results.json
# 调整并发数(默认 5,范围 5-100)
assetprobe -b urls.txt -c 20
```
**URL 列表文件格式 (urls.txt)**:
```
https://www.example.com
https://www.example.org
# 这是注释,将被忽略
https://192.168.1.1:8080
```
## 报告导出
### HTML 报告
批量处理完成后,会自动生成包含以下内容的 HTML 报告:
- 📈 统计概览(总数、成功、失败、成功率)
- 📋 结果列表(URL、标题、状态码、Web 应用指纹)
- 🔍 搜索和过滤
- 🖼️ 截图预览(缩略图,点击可放大)
- 🎨 现代简约白色主题,动画流畅
### JSON 报告
```
# 单个 URL - 输出到控制台
assetprobe -u https://example.com -j
# 单个 URL - 保存到文件
assetprobe -u https://example.com -j -o results.json
# 批量 - 输出到控制台
assetprobe -b urls.txt -j
```
JSON 报告包含:
- 时间戳
- 结果:URL、状态码、标题
- Web 应用指纹(厂商、产品、置信度)
- 中间件检测
- 编程语言检测
- 失败请求的错误代码
## 选项说明
| 选项 | 描述 | 默认值 |
|--------|-------------|---------|
| `-u, --url ` | 要访问的网址 | - |
| `-p, --proxy ` | 代理服务器(格式:`IP:PORT` 或 `http://IP:PORT`) | - |
| `-b, --batch ` | 用于批量处理的 URL 列表文件 | - |
| `-c, --concurrency ` | 并发处理数量 | 5 |
| `-s, --screenshot [file]` | 保存网站截图 | - |
| `-f, --full` | 截取整个页面 | - |
| `-j, --json` | 输出 JSON 到控制台 | - |
| `-o, --output ` | 保存 JSON 到文件 | - |
| `-h, --help` | 显示帮助信息 | - |
## 截图说明
### 单 URL 模式
- 按域名/IP 自动保存
- 文件名:`screenshot_timestamp.png`
- 支持自定义文件名
### 批量模式
- 时间戳文件夹:`screenshots/batch/timestamp/`
- 文件名:`domain.png`
- 自动生成 HTML 报告
### 文件夹结构
```
screenshots/
├── www.example.com/ # Single mode
│ └── screenshot_2025-12-31.png
└── batch/ # Batch mode
└── 2025-12-31T10-00-00/
├── report.html # HTML report
├── results.json # JSON report
├── www.example.com.png
└── www.example.org.png
```
## 性能优化
- **默认并发数**:5(平衡性能与稳定性)
- **可调范围**:5-100
- **批量模式超时**:30 秒
- **批量模式等待**:500ms
**性能对比:**
```
Sequential: 100 URL × 2 sec = 200 sec (3.3 min)
Concurrent 5: 100 URL ÷ 5 × 2 sec = 40 sec
Concurrent 20: 100 URL ÷ 20 × 2 sec = 10 sec
Concurrent 50: 100 URL ÷ 50 × 2 sec = 4 sec
```
## 状态码参考
| 状态码 | 含义 | 示例 |
|-------------|---------|---------|
| 200-299 | 成功 | 200 ✓ |
| 300-399 | 重定向 | 301 ↪ |
| 400-499 | 客户端错误 | 404 ⚠️ |
| 500-599 | 服务器错误 | 500 ❌ |
| 连接失败 | 站点不可达 | 站点不可达 ✗ |
## 开发相关
### NPM 脚本
```
npm start # Run main program
npm run install-browser # Install browser manually
```
### 全局安装(开发模式)
如果希望从本地源码进行全局安装:
```
# 在项目根目录下
npm link
# 或者使用 npm 全局安装
npm install -g ./
# 测试
assetprobe --help
```
### 卸载
```
# 卸载全局安装
npm uninstall -g assetprobe
```
## 项目结构
```
assetprobe/
├── assetprobe.js # Main program
├── package.json # Project config
├── README.md # Documentation (English)
├── README_CN.md # Documentation (Chinese)
├── LICENSE # License
├── .npmignore # npm ignore rules
├── webapp-fingerprints.json # Web app fingerprint database
├── middleware-fingerprints.json # Middleware fingerprint database
├── language-fingerprints.json # Programming language fingerprint database
└── screenshots/ # Screenshot directory (auto-created)
```
## 注意事项
1. **首次运行**:`npm install` 会自动下载 Chromium(约 300MB)
2. **代理地址**:可以省略 `http://` 前缀,程序会自动处理
3. **超时时间**:单次模式 60 秒,批量模式 30 秒
4. **反爬虫**:部分网站可能具有反爬虫机制,请合理设置请求频率
5. **写入权限**:截图保存在当前目录,请确保具有写入权限
6. **并发数**:建议从低并发开始逐步增加(5 → 10 → 20)
## 许可证
[ISC License](LICENSE)
## 作者
Ark
## 致谢
- [Playwright](https://playwright.dev/) - 现代化的浏览器自动化工具
- Web 应用指纹数据库整理自开源项目
**Made with ❤️ by Ark**
标签:C2日志可视化, GNU通用公共许可证, HTML报告, MITM代理, Node.js, Playwright, SPA渲染, Web安全, Web应用指纹, 中间件识别, 动态渲染, 密码管理, 批量探测, 指纹识别, 暗色界面, 特征检测, 站点扫描, 端口扫描验证, 网络安全, 自动化截图, 自定义脚本, 蓝队分析, 资产测绘, 隐私保护