TXT0Law/OrbiCheck
GitHub: TXT0Law/OrbiCheck
OrbiCheck 是一个全栈式 Web 信息侦察与持续监控平台,能够自动生成包含 IP、DNS、SSL 及威胁情报的评估报告并支持页面变更告警。
Stars: 4 | Forks: 0
# Or里兰卡
[](https://github.com/TXT0Law/OrbiCheck/actions/workflows/ci.yml)
[](LICENSE)
[]()
一个外部视角的网站安全评估平台。提供一个 URL,即可获取一份完整的侦察报告——涵盖 IP、DNS、SSL/TLS、HTTP 头、技术栈、威胁情报以及 30 多个其他模块——全部基于外部视角。
## 目录
- [功能](#features)
- [截图](#screenshots)
- [扫描](#scan)
- [监控](#monitoring)
- [告警](#alerts)
- [报告](#reports)
- [架构](#architecture)
- [快速开始](#getting-started)
- [前置条件](#prerequisites)
- [克隆仓库](#clone-the-repository)
- [前端设置](#frontend-setup)
- [后端设置](#backend-setup)
- [扫描服务设置](#scan-service-setup)
- [数据库迁移](#database-migration)
- [启动所有服务](#start-all-services)
- [Docker 部署](#docker-deployment)
- [一键启动](#one-command-start)
- [生产模式](#production-mode)
- [Docker 服务](#docker-services)
- [DigitalOcean App Platform](#digitalocean-app-platform)
- [环境变量](#environment-variables)
- [API 文档](#api-documentation)
- [测试](#testing)
- [技术栈](#tech-stack)
- [项目结构](#project-structure)
- [致谢](#acknowledgments)
- [贡献](#contributing)
- [许可证](#license)
## 功能
**OSINT 侦察** — 30 多个自动化模块,从外部探测目标 URL:
| 类别 | 模块 |
|----------|---------|
| 网络 | IP 地理位置、DNS 记录、DNS 服务器、TXT 记录、WHOIS、traceroute、开放端口 |
| SSL / TLS | 证书链分析、加密套件、协议版本 |
| 安全 | HTTP 安全头、HSTS、DNSSEC、WAF 检测、security.txt |
| 内容 | HTTP 头、cookies、robots.txt、站点地图、关联页面 |
| 威胁情报 | 恶意软件/钓鱼检测、黑名单查询 |
| 站点概况 | 技术栈(Wappalyzer + 头指纹)、社交标签、质量指标、截图 |
| 其他 | Wayback Machine 归档、邮件配置(SPF/DKIM/DMARC)、全球排名、碳足迹 |
**实时进度** — 基于 SSE 的实时更新,每个模块完成时即时反馈。
**风险分析** — 基于原始扫描数据自动计算严重性评分和类别摘要。
**持续监控** — 随时间跟踪正常运行时间、内容变更、SSL 过期和视觉差异。
**URL 分组** — 组织目标并在多个 URL 上运行批量扫描。
## 截图
按区域分组的 UI 演示(静态资源位于 [`docs/assets`](docs/assets))。
### 扫描



### 监控





### 告警



### 报告

## 架构
```
Frontend (Next.js :3000) ← Project root (monorepo)
| REST + SSE
v
Backend (FastAPI :8000)
|-- HTTP --> Scan Service (Node.js Express :4000)
|-- --> Redis (:6379) Cache + task broker
|-- --> PostgreSQL (:5432) Data persistence
|
|-- Celery worker Async scan tasks + scheduled monitoring
'-- Celery beat Periodic task scheduler
```
前端仅与后端通信。扫描服务是一个内部服务,封装了 30 多个 OSINT 模块,仅由后端通过 HTTP 调用。
所有七个服务(frontend、backend、scan-service、celery-worker、celery-beat、postgres、redis)都可以使用 Docker Compose 通过单个命令启动——参见 [Docker 部署](#docker-deployment)。
## 快速开始
### 前置条件
| 工具 | 版本 | 用途 |
|------|---------|---------|
| Node.js | >= 20 LTS | 前端 + 扫描服务 |
| pnpm | >= 9 | 前端包管理器 |
| npm | (随 Node 捆绑) | 扫描服务包管理器 |
| Python | >= 3.11 | 后端 |
| uv | latest | Python 包管理器 ([安装](https://docs.astral.sh/uv/getting-started/installation/)) |
| PostgreSQL | >= 16 | 数据库 |
| Redis | >= 7 | 缓存和任务队列 |
### 克隆仓库
```
git clone https://github.com/TXT0Law/OrbiCheck.git
cd OrbiCheck
```
### 自动化设置
运行设置脚本以一次性安装所有依赖:
```
bash scripts/dev/setup.sh
```
这将安装前端、后端和扫描服务的依赖,复制 `.env.example` 文件,并运行数据库迁移。您也可以按照下文描述手动进行设置。
### 前端设置
前端位于项目根目录(没有单独的 `frontend/` 目录)。
```
pnpm install
```
### 后端设置
```
cd backend
uv venv
uv pip install -e ".[dev]"
```
复制环境文件并根据您的本地设置进行编辑:
```
cp .env.example .env
# 编辑 backend/.env — 至少设置 DATABASE_URL、REDIS_URL 和 AUTH_SESSION_SECRET
```
### 扫描服务设置
```
cd backend/scan
npm install
npx playwright install chromium # Required for the screenshot module
```
(可选)复制并配置扫描服务的环境变量:
```
cp .env.example .env
# 可选:设置 IPINFO_TOKEN、BUILT_WITH_API_KEY 等。
```
### 数据库迁移
确保 PostgreSQL 正在运行,然后:
```
cd backend
uv run alembic upgrade head
```
### 启动所有服务
您需要**同时运行三个服务**。按顺序启动它们:
**终端 1 — 扫描服务(端口 4000)**
```
cd backend/scan
node server.js
```
**终端 2 — 后端 API(端口 8000)**
```
cd backend
uv run uvicorn app.main:app --host 0.0.0.0 --port 8000
```
**终端 3 — 前端(端口 3000)**
```
pnpm dev
```
在浏览器中打开 http://localhost:3000。默认登录凭据:
- 邮箱:`admin@orbicheck.local`
- 密码:`change-me`
## Docker 部署
全栈通过 Docker Compose 容器化。所有七个服务(postgres、redis、scan-service、backend、celery-worker、celery-beat、frontend)都通过健康检查和依赖顺序进行编排。
### 一键启动
```
bash deploy/deploy.sh
```
这将:
1. 如果缺失则复制 `.env.example` 文件
2. 构建所有 Docker 镜像(多阶段构建)
3. 启动全栈(`docker compose up -d`)
4. 等待每个服务报告健康状态
完成后,打开 http://localhost:3000(前端)和 http://localhost:8000(后端)。
要停止:
```
bash deploy/deploy.sh --down
```
要重置所有数据(删除卷):
```
docker compose down --remove-orphans -v
```
### 生产模式
生产模式使用外部的 PostgreSQL 和 Redis,而不是本地容器:
```
DATABASE_URL="postgresql+asyncpg://user:pass@host:5432/db" \
REDIS_URL="redis://host:6379/0" \
bash deploy/deploy.sh --prod
```
这仅启动应用服务(postgres 和 redis 容器被缩放为 0)。`docker-compose.prod.yml` 覆盖文件会注入外部连接字符串。
### Docker 服务
| 服务 | 镜像 / Dockerfile | 端口 | 备注 |
|---------|-------------------|------|-------|
| **postgres** | `postgres:16-alpine` | 5432 (内部) | 数据通过命名卷持久化 |
| **redis** | `redis:7-alpine` | 6379 (内部) | AOF 持久化 |
| **scan-service** | `docker/scan/Dockerfile` | 4000 (内部) | Alpine + 系统 Chromium(无需 Playwright 下载) |
| **backend** | `docker/backend/Dockerfile` | 8000 (对外) | 启动时自动运行 Alembic 迁移 |
| **celery-worker** | 与 backend 相同 | — | `CELERY_MODE=worker` |
| **celery-beat** | 与 backend 相同 | — | `CELERY_MODE=beat` |
| **frontend** | `docker/frontend/Dockerfile` | 3000 (对外) | Next.js standalone 输出 |
关键设计决策:
- **scan-service** 使用 `node:20-alpine` + 系统 `chromium` 包,而不是 Playwright 基础镜像,避免了构建期间不稳定的浏览器下载
- **backend** 入口点处理全新数据库(创建表 + `alembic stamp head`)和现有数据库(`alembic upgrade head`)均自动进行
- **celery-worker** 和 **celery-beat** 共享 backend 镜像,并通过 `CELERY_MODE` 环境变量进行路由
- **frontend** 使用多阶段构建,配置 `output: "standalone"`,并将 `/api/v1/*` 重写为内部 backend 主机名
### DigitalOcean App Platform
包含用于 DigitalOcean App Platform 部署的 `.do/app.yaml` 规范。它定义了所有服务、worker、托管数据库(Postgres + Redis)和入口路由规则。部署前请调整密钥(`AUTH_SESSION_SECRET`、`AUTH_LOGIN_PASSWORD`)。
### 常用 Docker 命令
```
docker compose ps # Service status
docker compose logs --no-color backend # View backend logs
docker compose logs --no-color -f frontend # Follow frontend logs
docker compose exec backend bash # Shell into backend container
```
## 环境变量
### 后端 (`backend/.env`)
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `DATABASE_URL` | — | PostgreSQL 连接字符串 (asyncpg) |
| `REDIS_URL` | `redis://localhost:6379/0` | Redis 连接字符串 |
| `SCAN_SERVICE_URL` | `http://localhost:4000` | 内部扫描服务 URL |
| `CORS_ORIGINS` | `["http://localhost:3000"]` | 允许的 CORS 源 |
| `AUTH_LOGIN_EMAIL` | `admin@orbicheck.local` | 登录邮箱 |
| `AUTH_LOGIN_PASSWORD` | `change-me` | 登录密码 |
| `AUTH_SESSION_SECRET` | — | 用于签名的会话密钥(必填——使用长随机字符串;生产环境中不要使用默认值) |
| `AUTH_COOKIE_SECURE` | `false` | 生产环境中设置为 `true` (HTTPS) |
完整列表(包括 SMTP 设置)请参见 `backend/.env.example`。
### 前端 (`.env.local`)
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `NEXT_PUBLIC_API_URL` | `http://localhost:8000` | 后端 API URL |
复制根目录下的示例文件:
```
cp .env.example .env.local
```
### 扫描服务 (`backend/scan/.env`)
所有变量均为可选。可用选项(如 `IPINFO_TOKEN` 和 `BUILT_WITH_API_KEY`)请参见 `backend/scan/.env.example`。
## API 文档
当后端运行时,交互式 API 文档位于:
- **Swagger UI**: http://localhost:8000/api/docs
- **OpenAPI JSON**: http://localhost:8000/api/openapi.json
### 关键端点
```
POST /api/v1/scans Create a new scan
GET /api/v1/scans List scans
GET /api/v1/scans/{id} Get scan status
GET /api/v1/scans/{id}/detail Get full scan results (with risk analysis)
POST /api/v1/scans/{id}/cancel Cancel a running scan
GET /api/v1/scans/{id}/progress SSE — real-time scan progress
CRUD /api/v1/url-groups URL group management
CRUD /api/v1/monitors Continuous monitoring ⚠
GET /api/v1/monitors/live SSE — monitor live updates ⚠
GET /api/v1/alerts Alert events ⚠
POST /api/v1/reports Generate reports ⚠
GET /api/v1/health Health check
```
所有响应遵循统一格式:
```
{
"status": "success",
"data": { ... },
"meta": { "page": 1, "total": 100 }
}
```
完整文档请参见:
- [API 参考](docs/api/README.md) — 包含请求/响应详情的所有端点
- [扫描模块](docs/scan-modules.md) — 30 多个 OSINT 模块目录
- [集成指南](docs/integration-guide.md) — 如何从外部应用程序使用 API
- [静态 OpenAPI 规范](docs/openapi.json) — 机器可读的 API 规范
## 测试
```
# 运行所有测试
make test
# 前端单元测试
make test-frontend
# 后端测试 (pytest — all marks)
make test-backend
# 后端单元 / 集成 / e2e 分别测试
make test-backend-unit
make test-backend-integration
make test-backend-e2e
# Scan Service 测试
make test-osint
# Watch 模式
make test-watch
# 覆盖率报告
make test-cov
# 连接前后端测试
# 需要所有服务运行
pnpm test:linked
```
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| 前端 | Next.js 14 (App Router), React 18, TypeScript |
| UI | Tailwind CSS, shadcn/ui, Recharts |
| 状态 | Zustand (客户端), TanStack Query (服务端) |
| 后端 API | Python FastAPI, SQLAlchemy (async), Pydantic |
| 任务队列 | Celery + Redis |
| 扫描服务 | Node.js, Express |
| 数据库 | PostgreSQL + Alembic migrations |
| 缓存 | Redis |
| 测试 | Vitest, Playwright, pytest, Jest |
## 项目结构
```
OrbiCheck/
├── app/ # Next.js App Router pages
├── components/ # React components (ui/, scan/, dashboard/, monitor/, etc.)
├── lib/ # API clients, hooks, stores, utilities
├── types/ # TypeScript type definitions
├── shared/ # Cross-service shared types, constants, schemas
├── tests/ # Frontend tests (Vitest + Playwright)
├── public/ # Static assets
│
├── backend/
│ ├── app/ # FastAPI application
│ │ ├── api/v1/ # REST endpoints
│ │ ├── models/ # SQLAlchemy ORM models
│ │ ├── services/ # Business logic + data transformers
│ │ ├── tasks/ # Celery async tasks
│ │ ├── core/ # Auth, middleware, exceptions
│ │ └── db/ # Database session + Alembic migrations
│ ├── scan/ # Node.js Scan Service (30+ OSINT modules)
│ └── tests/ # Backend tests (unit, integration, e2e)
│
├── docker/ # Docker configurations
│ ├── frontend/Dockerfile # Next.js multi-stage standalone build
│ ├── backend/Dockerfile # FastAPI + Alembic + Celery
│ ├── backend/entrypoint.sh # Bootstrap-friendly DB init
│ ├── celery/entrypoint.sh # Worker / beat mode router
│ ├── scan/Dockerfile # Node.js + system Chromium
│ └── init/init-db.sql # PostgreSQL extensions
├── docker-compose.yml # Full local stack (7 services)
├── docker-compose.prod.yml # Production override (external DB/Redis)
├── deploy/deploy.sh # One-command build + up + healthcheck
├── .do/app.yaml # DigitalOcean App Platform spec
├── .dockerignore
│
├── quickstart/ # Native local startup scripts (no Docker)
├── scripts/ # Dev / CI scripts
├── Makefile # Common dev commands
└── package.json
```
## 致谢
OSINT 扫描模块和整体侦察方法**灵感来源于** Alicia Sykes ([@Lissy93](https://github.com/Lissy93)) 开发的 [web-check](https://github.com/Lissy93/web-check) —— 一个用于网站情报的开源一体化 OSINT 工具。OrbiCheck 在其自身的技术栈(Next.js、FastAPI、PostgreSQL 等)之上构建了一个独特的产品,并扩展了监控和报告等功能,但其检查的广度在概念上归功于该项目。
## 贡献
欢迎贡献!请参阅 [CONTRIBUTING.mdCONTRIBUTING.md) 了解如何开始的指南。
## 安全
如果您发现安全漏洞,请参阅 [SECURITY.md](
标签:C2日志可视化, DNS分析, ESC4, GitHub, MITM代理, OSINT, Snort++, SSL/TLS检测, WAF探测, Web安全, 主机安全, 占用监测, 反取证, 威胁情报, 子域名枚举, 安全分析, 安全评估, 安全运营, 开发者工具, 开源安全工具, 扫描框架, 持续监控, 指纹识别, 搜索引擎查询, 数据统计, 测试用例, 漏洞报告, 端口扫描, 系统安全, 自动化攻击, 蓝队分析, 被动扫描, 请求拦截, 资产管理, 逆向工具, 逆向工程平台