Ly0kha/obsidex
GitHub: Ly0kha/obsidex
一款基于 Go 的大规模并发端口扫描器,支持按国家 IP 段、CIDR 和域名进行高速端口发现与 Banner 抓取。
Stars: 0 | Forks: 0
# OBSIDEX
## 什么是 OBSIDEX?
OBSIDEX 自动化了大范围 IP 段中发现开放端口的繁琐过程。无需再手动解析域名、计算 IP 子网并逐一扫描,OBSIDEX 通过单条命令即可完成所有操作。
**专为以下人员打造:**
- **红队** — 快速映射整个组织 IP 空间的攻击面
- **蓝队** — 审计组织内部暴露的服务(如开放的 SSH、SMTP、RDP 等)
- **安全研究人员** — 大规模发现易受攻击的服务以进行负责任的漏洞披露
## 功能特性
| 功能 | 描述 |
|---------|-------------|
| **国家级扫描** | 使用真实的 RIR 委派数据扫描分配给任何国家的所有 IP |
| **CIDR 扫描** | 扫描特定的子网(例如 `10.10.10.0/24`)|
| **域名扩展** | 解析域名,获取 IP,自动扩展至 /24 子网并进行扫描 |
| **极速执行** | 借助 Go 语言的 goroutine 并发机制 — 支持高达 50,000+ 并发连接 |
| **丰富的报告** | 支持 Table、JSON、CSV 格式输出,并附带端口分布图表 |
| **端口预设** | 内置预设组合:`common`、`critical`、`web`、`db`、`remote` |
| **Banner 抓取** | 可选的服务 Banner 探测功能 |
| **智能过滤** | 自动排除私有/保留 IP,支持自定义排除范围 |
| **实时进度** | 实时进度条,显示扫描速率和预计剩余时间 |
| **跨平台** | 支持 Windows、Linux、macOS — 单一二进制文件,零依赖 |
## 架构
```
+------------------+
| CLI Input |
| (country/cidr/ |
| domain + ports) |
+--------+---------+
|
+--------------+--------------+
| | |
+------+------+ +----+----+ +------+------+
| --country | | --cidr | | --domain |
| RIR Resolver| | Parser | | DNS Resolve |
| (5 RIRs) | | | | + /24 expand|
+------+------+ +----+----+ +------+------+
| | |
+--------------+--------------+
|
+--------v---------+
| IP Generator |
| (streams IPs via |
| Go channels) |
+--------+---------+
|
+--------v---------+
| Scanner Engine |
| Worker Pool |
| (5,000-50,000 |
| goroutines) |
| |
| TCP Connect --> |---> Target IPs
| Banner Grab |
| Private IP Skip |
+--------+---------+
|
+--------v---------+
| Reporter |
| |
| - Table (stdout) |
| - JSON export |
| - CSV export |
| - Port distro |
| - Host grouping |
+------------------+
```
### 模块拆解
```
obsidex/
main.go CLI entry, subcommands, flag parsing, orchestration
rir.go RIR delegation file download, parse, country-to-CIDR mapping
scanner.go Worker pool TCP scanner, progress tracking, banner grab
report.go Table/JSON/CSV output, port distribution, host grouping
go.mod Go module definition (zero external dependencies)
```
**数据流:**
1. **CLI** 解析用户输入并解析端口预设
2. **RIR 解析器** 使用来自全球 5 个区域互联网注册管理机构的缓存 RIR 委派数据,将国家代码映射到 CIDR 范围
3. **IP 生成器** 通过 Go channels 流式传输 IP — 永远不会将所有 IP 加载到内存中
4. **扫描引擎** 生成数千个 goroutine,并行对目标进行 TCP 连接扫描
5. **报告器** 聚合结果,按主机分组,并以请求的格式输出
## 安装说明
### 选项 1:预编译二进制文件(最快)
1. 前往 [Releases](https://github.com/Ly0kha/obsidex/releases) 页面
2. 下载 `obsidex.exe` (Windows) 或 `obsidex` (Linux/macOS)
3. 将二进制文件放置在您选择的文件夹中
**Windows — 添加到 PATH(可选,用于在任意位置运行):**
- 打开 **设置** > **系统** > **关于** > **高级系统设置**
- 点击 **环境变量**
- 在 **用户变量** 下,选择 **Path** 并点击 **编辑**
- 点击 **新建** 并添加您放置 `obsidex.exe` 的文件夹路径
- 点击 **确定** 保存
- 重启您的终端
**Linux/macOS:**
```
chmod +x obsidex
sudo mv obsidex /usr/local/bin/
```
### 选项 2:从源码构建
需要 [Go 1.21+](https://go.dev/dl/)
```
git clone https://github.com/Ly0kha/obsidex.git
cd obsidex
go build -o obsidex.exe .
```
### 验证安装
```
obsidex version
```
## 快速入门
### 1. 下载 IP 数据库
在按国家扫描之前,请先下载 RIR 委派数据(一次性设置):
```
obsidex update
```
这将从所有 5 个 RIR 下载 IP 分配数据并构建国家索引。如果您只打算扫描 CIDR 或域名,则可以跳过此步骤。
### 2. 按国家扫描
```
obsidex scan -country
-ports -threads
```
### 3. 扫描特定子网
```
obsidex scan -cidr 10.10.10.0/24 -ports 22,80,443,3389
```
### 4. 从域名扫描
```
obsidex scan -domain target.example.com -ports 22,25,80,443
```
## 使用方法
```
USAGE:
obsidex [flags]
COMMANDS:
scan Scan ports on target IPs (by country, CIDR, or domain)
update Download/update country IP range database (RIR data)
countries List all available country codes with IP counts
```
### 扫描 Flags
| Flag | 默认值 | 描述 |
|------|---------|-------------|
| `-country` | | 两个字母的国家代码 |
| `-cidr` | | 要扫描的 CIDR 范围(例如 10.10.10.0/24)|
| `-domain` | | 要解析并扩展至 /24 子网的域名 |
| `-ports` | `common` | 要扫描的端口(数字、范围或预设)|
| `-threads` | `5000` | 并发扫描的 goroutine 数量 |
| `-timeout` | `1.5s` | 每个目标的连接超时时间 |
| `-output` | stdout | 输出文件路径 |
| `-format` | `table` | 输出格式:`table`、`json`、`csv` |
| `-limit` | `0` | 最大扫描 IP 数(0 = 无限制)|
| `-banner` | `false` | 启用 Banner 抓取 |
| `-exclude` | | 要排除的 CIDR 范围(以逗号分隔)|
| `-no-progress` | `false` | 禁用进度条 |
### 端口预设
| 预设 | 端口 |
|--------|-------|
| `common` | 21,22,23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5432,5900,8080,8443,8888,9090,27017 |
| `critical` | 21,22,23,25,53,69,110,135,137,139,143,161,389,445,512-514,1099,1433,1521,2049,3306,3389,4444,5432,5555,5900,6379,8080,9200,11211,27017 |
| `web` | 80,443,8080,8443,8000,8888,9090,3000,5000 |
| `db` | 1433,1521,3306,5432,6379,9042,9200,11211,27017,28017 |
| `remote` | 22,23,3389,5900,5901,5938,4899,2222 |
## 高级用法
### 蓝队:审计您的组织
```
# 查找所有暴露的 SMTP 服务器
obsidex scan -country -ports 25 -output smtp_audit.json -format json
# 审计特定 CIDR 范围的危险端口
obsidex scan -cidr 203.0.113.0/24 -ports critical -banner
# 查找暴露的数据库
obsidex scan -cidr 198.51.100.0/16 -ports db -output db_exposure.csv -format csv
```
### 红队:攻击面映射
```
# 对目标域的邻近环境进行快速侦察
obsidex scan -domain target.example.com -ports common -banner
# 查找所有 RDP 端点
obsidex scan -country -ports 3389 -threads 20000
# 执行带排除项的扫描
obsidex scan -cidr 192.0.2.0/24 -ports 22,80,443 -exclude 192.0.2.128/25
```
### 与其他工具集成
```
# 导出为 JSON 以使用 jq 进行处理
obsidex scan -cidr 10.0.0.0/16 -ports 22,80 -format json -output scan.json
cat scan.json | jq '.hosts[].ip'
# 将结果提供给 nmap 进行深入分析
obsidex scan -cidr 198.51.100.0/24 -ports 22 -format csv -output ssh_hosts.csv
```
## 法律免责声明
**OBSIDEX 仅设计用于授权的安全测试。**
- 请在明确的书面授权下使用
- 用于您自己的基础设施安全审计
- 作为已授权的渗透测试项目的一部分使用
- 请勿对您不拥有或未获得测试权限的网络使用
- 请勿用于恶意目的
**您需对自己的行为承担全部责任。作者不对该工具的滥用承担任何责任。**
请始终遵守有关网络扫描的当地法律法规。许多司法管辖区都有特定的计算机欺诈和滥用法规来约束端口扫描活动。
## 贡献
欢迎贡献!请:
1. Fork 本仓库
2. 创建一个功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交您的更改 (`git commit -m 'Add amazing feature'`)
4. 推送到该分支 (`git push origin feature/amazing-feature`)
5. 发起一个 Pull Request
## 许可证
本项目基于 MIT 许可证授权 - 详见 [LICENSE](LICENSE) 文件。 标签:Banner抓取, CIDR扫描, EVTX分析, Golang, Go语言, IP范围扫描, OBSIDEX, RIR数据, SYN扫描, 国家级扫描, 域名解析, 大规模扫描, 安全编程, 密码管理, 并发扫描, 开源安全工具, 恶意行为检测, 插件系统, 攻击面测绘, 数据统计, 日志审计, 暴露面评估, 服务器安全, 程序破解, 端口扫描, 网络安全, 聊天机器人, 逆向工程平台, 隐私保护