CarlosCommits/stackray
GitHub: CarlosCommits/stackray
Stackray 是一款自托管网站情报应用,通过多阶段扫描检测任意网站背后的技术栈并保留可搜索的变更历史。
Stars: 7 | Forks: 1
# Stackray - 检查任何网站背后的技术栈
Stackray 是一款自托管的网站情报应用,用于扫描域名和 URL,检测其背后的技术,并保留可搜索的变更记录。
给定一个目标,Stackray 将执行多阶段扫描,涵盖 HTTP 探测、浏览器渲染、DNS、子域名发现、IP 情报、屏幕截图、Nuclei 模板以及技术信息补充。最终结果提供了一个实用的视图,展示网站是使用什么构建的、它如何响应,以及围绕它的可见公开信号。
请在 [stackray.app](https://stackray.app) 体验实时演示。
## 目录
- [你可以做什么](#what-you-can-do)
- [在 Railway 上部署](#deploy-on-railway)
- [本地开发](#local-development)
- [文档](#documentation)
- [基于 ProjectDiscovery 构建](#built-on-projectdiscovery)
- [合理使用](#responsible-use)
- [许可证](#license)
## 你可以做什么
### 检测
- 检测框架、CMS、电子商务平台、分析工具、CDN、WAF、托管提供商以及其他 Web 技术。
- 捕获屏幕截图、网站图标(favicons)、页面标题、响应元数据、重定向、TLS 详情、DNS 记录和服务器指纹。
- 通过被动子域名发现、IP/ASN 上下文、DNS 服务证据以及 OSINT 式的公开信号来丰富目标信息。
- 运行由 Nuclei 支持的检查,以发现基于模板的 DNS、HTTP 和暴露问题。
### 工作流
- 比较多个网站的技术栈。
- 安排定期扫描。
- 从 Web UI 查看扫描历史记录,并通过 HTTP/JSON API 和 SSE 事件流获取进度/结果。
### 协作
- 邀请团队成员加入您部署的实例,并为他们创建用户帐户。
- 为需要排队扫描并与 Stackray 数据进行交互的集成、自动化或 AI agent 创建 API 密钥。
## 在 Railway 上部署
[](https://railway.com/deploy/stackray)
Stackray 的设计旨在让您能够轻松地在 Railway 上进行自托管。一键模板可以在一个流程中配置 Web 应用、扫描器 worker、Postgres 数据库和兼容 S3 的存储,因此您无需自己手动配置每个服务,即可从一个全新的 Railway 项目变为一个正常运行的 Stackray 实例。
部署完成后,在 Railway 中打开 `Stackray-website` 服务。这是运行 Stackray 的 Next.js 服务。转到 `Settings` -> `Networking` -> `Public Networking`,然后点击 `Generate Domain` 以获取公开的 Stackray URL。
Stackray 的 Railway 布局使用独立的服务来实现:
- `Stackray-website` - Next.js 应用、API 路由、身份验证以及发布/更新通知
- `worker-http` - HTTP 探测和技术检测
- `worker-intel` - 子域名、DNS、Nuclei、IP 以及扫描收尾工作
- `worker-browser` - 浏览器渲染、屏幕截图和运行时技术检测
- `postgres` - 应用数据、扫描历史记录、身份验证记录以及 Graphile Worker 任务
- `s3` - 屏幕截图和扫描产物存储
请参阅 [docs/railway-template-readme.md](docs/railway-template-readme.md) 了解模板副本,并参阅 [docs/railway-updates.md](docs/railway-updates.md) 了解如何更新现有部署。
## 本地开发
Stackray 使用 Node `24.x`、`pnpm@10.26.1` 和 Docker 来提供扫描器依赖。在启动本地技术栈之前,请确保 Docker 已安装并正在运行。
```
pnpm install
```
如果本地没有 `pnpm`,请通过 Corepack 启用它并锁定匹配的版本:
```
corepack enable && corepack prepare pnpm@10.26.1 --activate
```
最简单的本地设置是将 Next.js 开发服务器保留在主机上,并在 Docker 中运行扫描依赖:
- Postgres 存储应用数据和 Graphile Worker 任务。
- MinIO 提供本地兼容 S3 的屏幕截图存储桶。
- Worker 容器提供扫描器二进制文件、Nuclei 模板以及浏览器/屏幕截图运行时依赖。
初始化本地环境:
```
pnpm dev:init
```
这将在需要时根据 `.env.local.example` 创建 `.env.local`,启动本地基础设施,应用数据库迁移,并创建一个本地管理员用户:
- 邮箱:`admin@stackray.local`
- 密码:`StackrayDev123!`
启动应用和 worker:
```
pnpm dev:local
```
有用的本地命令:
```
pnpm dev:infra # start Postgres, MinIO, and bucket initialization
pnpm dev:local:down # stop local Docker services, keeping data volumes
pnpm dev:local:wipe # stop local Docker services and delete local data volumes
pnpm dev:infra:logs # follow local service logs
```
`pnpm dev:local` 在选择可用端口后,会打印出应用、Postgres、MinIO API 和 MinIO 控制台的 URL。第一个本地技术栈通常使用应用 `http://localhost:3000`,Postgres `127.0.0.1:5432`,MinIO API `127.0.0.1:9000`,以及 MinIO 控制台 `127.0.0.1:9001`。
## 文档
## 基于 ProjectDiscovery 构建
Stackray 构建于 [ProjectDiscovery](https://projectdiscovery.io/) 出色的开源安全工具之上,特别是:
- [httpx](https://github.com/projectdiscovery/httpx) 用于快速的 HTTP 探测、响应元数据、TLS/DNS 字段、屏幕截图和技术检测
- [nuclei](https://github.com/projectdiscovery/nuclei) 用于跨 HTTP、DNS、SSL 和相关协议的模板驱动检查
- [subfinder](https://github.com/projectdiscovery/subfinder) 用于被动子域名发现
特别感谢 ProjectDiscovery 团队和社区提供这些优秀的工具。
## 合理使用
Stackray 专为授权的资产盘点、安全研究和网站情报而构建。请负责任地使用它,并遵守适用的法律、服务条款和速率限制。请勿使用 Stackray 进行滥用流量、未经授权的漏洞测试或破坏服务。您需对如何部署和使用 Stackray 承担责任。
## 许可证
Stackray 基于 [MIT 许可证](LICENSE) 提供。
标签:GitHub, HTTPX, MITM代理, Web技术指纹, 主机安全, 实时处理, 密码管理, 插件系统, 测试用例, 漏洞探索, 自动化攻击, 自托管, 请求拦截, 资产测绘, 运行时操纵