fankh/openorb-scanner
GitHub: fankh/openorb-scanner
一款基于 Rust 构建的高性能开源网络端口与服务扫描器,提供 Nmap 级别的服务识别能力与 Masscan 级别的扫描速度。
Stars: 0 | Forks: 0
# OpenOrb — 开源网络端口与服务扫描器
[](LICENSE)
[](https://www.rust-lang.org/)
[]()
[](https://github.com/fankh/openorb-scanner/releases/latest)
**OpenOrb** 是一个用 Rust 编写的开源、高性能网络扫描器。它将快速端口扫描与服务/横幅识别结合在单一工具中——是用于网络发现的 Nmap 开源替代方案。
**核心亮点:**
- 使用 AF_PACKET + MMAP 零拷贝(Linux)每秒可扫描高达 **100 到 500 万个数据包**
- 通过 **banner grabbing** 检测服务(SSH、HTTP、FTP、SMB、MySQL、PostgreSQL、Redis、MongoDB 等)
- 将版本字符串解析为 **结构化数据**(核心版本、发行版、backport 检测)
- 提供 **REST API**,可与仪表盘和 CI/CD 流水线集成
## 为什么选择 OpenOrb?
| 功能 | OpenOrb | Nmap | Masscan |
|---------|---------|------|---------|
| 端口扫描 | TCP Connect, SYN, AF_PACKET | TCP, SYN, UDP | 仅 SYN |
| 最大吞吐量 | 1–5M pps | ~100K pps | 10M+ pps |
| Banner grabbing | 内置 | NSE 脚本 | 无 |
| REST API | 内置 (Axum) | XML 输出 | 无 |
| 开源协议 | MIT | GPL | AGPL |
| 单一二进制文件 | 9 MB | ~25 MB + 脚本 | 0.1 MB |
| 开发语言 | Rust | C/Lua | C |
## 快速开始
### 下载
预编译二进制文件 (Linux x86_64):
```
# 下载并运行
wget https://github.com/fankh/openorb-scanner/releases/latest/download/openorb
chmod +x openorb
./openorb scan 192.168.1.1 --top-ports 100
```
### 从源码构建
```
# 需要 Rust 1.70+
git clone https://github.com/fankh/openorb-scanner.git
cd openorb-scanner
cargo build --release
# Binary 位于 target/release/openorb
```
### 扫描模式
OpenOrb 通过 `--mode` 支持 2 种扫描模式:
| 模式 | 命令 | 描述 | 速度 |
|------|---------|-------------|-------|
| **port** | `--mode port` | 仅发现开放端口 | 最快 (~0.1s) |
| **service** | `--mode service` | 端口 + 应用程序名称及版本(默认) | ~8s (banner grab) |
```
# 仅 Port 发现(最快)
openorb scan 192.168.1.1 --top-ports 100 --mode port
# Port + service/version 检测(默认)
openorb scan 192.168.1.1 --top-ports 100 --mode service
# 带 JSON 输出的 Full port scan
openorb scan 10.0.0.0/24 --all-ports --json -o results.json
# 带 AF_PACKET 的快速扫描(Linux,需要 root)
sudo openorb scan 10.0.0.1 --all-ports --method afpacket --rate 100000
```
**示例 — 仅端口模式:**
```
$ openorb scan 127.0.0.1 --top-ports 25 --mode port
Scanning target: 127.0.0.1
Ports: 25 ports
Mode: Port Discovery Only
Method: TCP Connect (~6 packets/port)
Discovery Complete
Hosts found: 1
Open ports: 4
Duration: 0s
Discovered Hosts:
----------------------------------------------------------------------
127.0.0.1 (localhost)
80/tcp open
443/tcp open
5432/tcp open
8080/tcp open
```
**示例 — 服务模式:**
```
$ openorb scan 127.0.0.1 --top-ports 25 --mode service
Scanning target: 127.0.0.1
Ports: 25 ports
Mode: Port + Service Detection
Method: TCP Connect (~6 packets/port)
Discovery Complete
Hosts found: 1
Open ports: 4
Duration: 8s
Discovered Hosts:
----------------------------------------------------------------------
127.0.0.1 (localhost)
80/tcp http nginx/1.26.3 (Ubuntu)
443/tcp http nginx
5432/tcp postgresql
8080/tcp http
```
## 扫描方法
| 方法 | 速度 | 权限 | 适用场景 |
|--------|-------|------------|----------|
| **TCP Connect** | ~500 端口/秒 | 无 | 默认,适用于所有环境 |
| **SYN Scan** | ~1K pps | Root | 更隐蔽,半开扫描 |
| **AF_PACKET** | 1–5M pps | Root (Linux) | 大型网络扫描,masscan 级别的速度 |
| **Auto** | 可用的最快方法 | 自动检测 | 自动选择可用的最快方法 |
```
openorb scan TARGET --method connect # No root needed
openorb scan TARGET --method syn # Raw socket SYN scan
openorb scan TARGET --method afpacket # Zero-copy ring buffer (Linux)
openorb scan TARGET --method auto # Auto-detect best method (default)
```
## 功能
### 端口扫描与服务检测
OpenOrb 发现开放端口,并通过 banner grabbing 识别正在运行的服务。它将版本字符串解析为结构化数据,包括 OS/发行版检测。
```
$ openorb scan 127.0.0.1 --top-ports 25 --method connect
Scanning target: 127.0.0.1
Ports: 25 ports
Method: TCP Connect (~6 packets/port)
Discovery Complete
Hosts found: 1
Open ports: 4
Duration: 8s
Discovered Hosts:
----------------------------------------------------------------------
127.0.0.1 (localhost)
80/tcp http nginx/1.26.3 (Ubuntu)
443/tcp http nginx
5432/tcp postgresql
8080/tcp http
```
### JSON 输出
结构化 JSON 输出,便于与其他工具和流水线集成:
```
openorb scan 127.0.0.1 --top-ports 25 --method connect --json
```
```
{
"target": "127.0.0.1",
"scan_mode": "service",
"scan_method": "connect",
"total_hosts": 1,
"total_open_ports": 4,
"hosts": [
{
"ip": "127.0.0.1",
"hostname": "localhost",
"open_ports": [80, 443, 5432, 8080],
"services": [
{
"port": 80,
"service": "http",
"product": "nginx",
"version": "1.26.3 (Ubuntu)",
"confidence": 0.85,
"method": "banner-grab",
"banner": "HTTP/1.1 200 OK\r\nServer: nginx/1.26.3 (Ubuntu)...",
"metadata": {
"headers": {
"server": "nginx/1.26.3 (Ubuntu)",
"content-type": "text/html"
},
"status_code": 200
},
"parsed_version": {
"raw": "1.26.3 (Ubuntu)",
"core": "1.26.3",
"major": 1,
"minor": 26,
"patch": 3,
"distro": "Ubuntu"
}
}
]
}
]
}
```
### 用于大型扫描的 2 步流水线
对于大规模网络扫描,OpenOrb 支持 2 步流水线,并在步骤之间使用 SQLite 进行持久化。这允许你扫描数千台主机,然后逐步丰富结果:
```
# 步骤 1:快速 Port 发现
openorb discover 10.0.0.0/24 --top-ports 100 --method afpacket
# → Scan ID: 01fa9dc0-...
# 步骤 2:对已发现的 ports 进行 Banner grab
openorb grab 01fa9dc0-...
# 查看扫描历史
openorb scans
openorb status 01fa9dc0-...
```
**流水线输出示例:**
```
$ openorb discover 127.0.0.1 --top-ports 25 --method connect
[Step 1] Port Discovery
Target: 127.0.0.1
Ports: 25 ports
Method: Connect
Scan ID: 01fa9dc0-4f2a-4fab-9941-06dab7ade7cc
Discovery Complete!
Hosts: 1
Open ports: 4
Next step:
openorb grab 01fa9dc0-4f2a-4fab-9941-06dab7ade7cc
```
```
$ openorb grab 01fa9dc0-4f2a-4fab-9941-06dab7ade7cc
[Step 2] Banner Grabbing
Scan ID: 01fa9dc0-4f2a-4fab-9941-06dab7ade7cc
Assets: 4 ports to grab
Timeout: 3000ms
127.0.0.1:80 http 1.26.3 (Ubuntu)
127.0.0.1:443 http nginx
127.0.0.1:5432 postgresql -
127.0.0.1:8080 http -
Banner Grab Complete!
Services identified: 4
```
### REST API 服务器
内置 API 服务器 (Axum),用于将 OpenOrb 与仪表盘和 CI/CD 流水线集成:
```
openorb server --port 8080 --host 0.0.0.0
```
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/health` | 健康检查 |
| POST | `/api/v1/scans` | 创建扫描 |
| GET | `/api/v1/scans` | 列出扫描任务 |
| GET | `/api/v1/scans/:id` | 获取扫描详情 |
| GET | `/api/v1/dashboard/summary` | 仪表盘统计数据 |
## 架构
```
openorb (single binary)
├── discovery/ Port scanning + service detection
│ ├── scanner.rs TCP connect scan (async, tokio semaphore)
│ ├── syn_scanner.rs SYN scan (pnet raw sockets, rate-limited)
│ ├── afpacket.rs AF_PACKET + MMAP zero-copy ring buffer (1-5M pps)
│ ├── service.rs Banner grabbing (HTTP, SSH, FTP, SMB, MySQL, PostgreSQL, Redis, MongoDB)
│ └── models.rs Host, ServiceInfo, ParsedVersion
├── storage/ SQLite persistence (scans, ports, services)
├── api/ REST API (Axum framework)
└── plugins/ Experimental protocol-plugin scaffolding (Modbus; library-only, not yet exposed via CLI)
```
## CLI 参考
```
$ openorb --help
OpenOrb - Network Port & Service Scanner
Usage: openorb [OPTIONS]
Commands:
scan Scan target for open ports (and optionally services)
server Start API server
discover Step 1: Fast port discovery (no banner grab)
grab Step 2: Banner grab for discovered ports
scans List recent scans
status Show scan status and results
Options:
-d, --debug Enable debug logging
-h, --help Print help
-V, --version Print version
```
### 扫描选项
```
openorb scan [OPTIONS]
-p, --ports Ports to scan (e.g., 22,80,443 or 1-1000)
--top-ports Scan top N common ports
--all-ports Scan all 65535 ports
--mode port | service [default: service]
-o, --output Output file (JSON)
--timeout Port scan timeout in ms [default: 1000]
-m, --method connect | syn | afpacket | auto [default: auto]
--rate Packets per second limit [default: 1000]
--json Output as JSON
```
## 应用场景
- **资产发现** — 测绘整个基础设施中的网络服务和软件版本
- **攻击面测绘** — 在执行任务前发现开放端口和运行中的服务
- **网络资产盘点** — 结合 REST API 集成进行持续的端口/服务扫描
- **CI/CD 安全门禁** — 结合 REST API 集成进行自动化的暴露检查
## 许可证
[MIT](LICENSE) — 版权所有 2025 Seekers Lab
标签:Banner抓取, CVE匹配, Rust, 可视化界面, 密码管理, 插件系统, 数据统计, 端口扫描, 网络安全, 网络流量审计, 通知系统, 隐私保护