fankh/openorb-scanner

GitHub: fankh/openorb-scanner

一款基于 Rust 构建的高性能开源网络端口与服务扫描器,提供 Nmap 级别的服务识别能力与 Masscan 级别的扫描速度。

Stars: 0 | Forks: 0

# OpenOrb — 开源网络端口与服务扫描器 [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Rust](https://img.shields.io/badge/Built%20with-Rust-orange.svg)](https://www.rust-lang.org/) [![Platform](https://img.shields.io/badge/Platform-Linux%20%7C%20macOS%20%7C%20Windows-lightgrey.svg)]() [![Release](https://img.shields.io/github/v/release/fankh/openorb-scanner)](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, 可视化界面, 密码管理, 插件系统, 数据统计, 端口扫描, 网络安全, 网络流量审计, 通知系统, 隐私保护