LegitDecent/route-fork
GitHub: LegitDecent/route-fork
一款支持 SOCKS4/5 代理池路由的端口扫描器,配备 GUI 和 nmap 兼容 CLI,专为授权安全测试和防御性检测验证而设计。
Stars: 0 | Forks: 0
# Route Fork
[](https://github.com/LegitDecent/route-fork/actions/workflows/ci.yml)
[](https://github.com/LegitDecent/route-fork/actions/workflows/codeql.yml)
[](https://scorecard.dev/viewer/?uri=github.com/LegitDecent/route-fork)
[](LICENSE)
一个感知 SOCKS4/5 代理的端口扫描器,配备 GUI 和完全兼容 nmap 的 CLI。
它内置的扫描器(默认)通过轮换代理池路由所有连接,无需 proxychains;对于 CIDR 范围,可选择使用 nmap。
## 预期用例
Route Fork 专为防御者和操作人员构建,用于验证其自身的基础设施和检测 pipeline:
- **检测覆盖率测试** — 验证您的 SIEM/IDS/firewall 是否按预期标记类似扫描的流量和通过代理路由的访问。
- **出口日志验证** — 确认已批准的代理出口路径已被正确记录并在下游进行了丰富。
- **Geo-IP / 区域访问检查** — 确认您拥有的服务的 geo-IP 丰富度和区域访问行为(参见区域封锁检查器)。
- **蓝队遥测** — 为蓝队演练和检测调优生成受控的、经过授权的网络遥测数据。
- **代理路径故障排除** — 诊断可达性并剔除由不可靠代理引起的误报(法定人数确认、死代理剔除)。
以上所有内容均假设系统为您拥有或已获得明确授权进行测试。请参见[法律声明](#legal)。
## 功能
- **GUI** — 代理验证器、扫描器、Zenmap 风格的 Hosts 标签页(支持下钻)、实时日志
- **CLI** — nmap 风格的扁平化界面;在 nmap 模式下,未知标志会直接传递给 nmap
- **内置 TCP 扫描器**(默认) — 纯 Go 编写,零依赖,始终通过代理(无直接连接回退),无需 nmap 即可工作
- **扫描模式** — Fast / Confirmed / Paranoid:分别要求 1、2 或 3 个代理独立同意端口开放,以击败伪造成功连接(误报)的代理
- **服务及版本检测** — banner 解析(SSH/FTP/SMTP/POP3/IMAP)、主动 HTTP 探测(Server 标头)以及 TLS 端口上的 TLS 握手(版本 + 证书 CN)
- **nmap(可选)** — 为 CIDR 范围内的 nmap 提供本地 SOCKS4↔SOCKS5 中继,并警告 nmap 的 `--proxies` 可能会回退到直接连接(这是 nmap 无法避免的泄漏)
- **代理地理位置识别**(离线) — 每个代理都通过内嵌数据库标记其出口 IP 的所在国家;出口 IP 绝不会发送给第三方地理定位服务
- **区域封锁检查** — 从不同国家的代理探测目标,以发现地理封锁(某个端口在某些国家开放,但在其他国家被拒绝)
- **自愈池** — 扫描期间会跳过并剔除死代理;可选的自动重新验证功能会按间隔重新检查代理池
- **代理消耗保护**(可选) — 调整每个代理的复用节奏,防止免费的 SOCKS 池在扫描期间被触发频率限制或封禁(保护*您的*基础设施)
- **输出格式** — txt、json、xml、csv(CLI 的 `-out -` 可流式传输到 stdout 以便通过管道传输)
## 安装
从 [Releases](../../releases) 页面下载适用于您平台的二进制文件。
### macOS
Apple Silicon (M1/M2/M3) → `rofk-macos-arm64`;Intel → `rofk-macos-amd64`。
```
chmod +x rofk-macos-arm64 # rofk-macos-amd64 on Intel
sudo mv rofk-macos-arm64 /usr/local/bin/rofk
```
### Linux
x86_64 → `rofk-linux-amd64`;arm64 → `rofk-linux-arm64`。
```
chmod +x rofk-linux-amd64 # rofk-linux-arm64 on ARM
sudo mv rofk-linux-amd64 /usr/local/bin/rofk
```
### Windows
下载 `rofk-windows-amd64.exe`,重命名为 `rofk.exe`,并将其添加到 `PATH`。
### Man page(可选)
```
sudo install -m644 docs/rofk.1 /usr/local/share/man/man1/
man rofk
```
## nmap
nmap 模式需要使用 nmap。内置扫描器无需它即可工作。
```
macOS: brew install nmap
Linux: apt install nmap / dnf install nmap
Windows: winget install nmap
```
如果 nmap 位于非标准位置,请设置一次路径:
```
rofk -nmap-path /opt/nmap/bin/nmap -proxlist proxies.txt -ip target
```
该路径将保存到 `~/.config/rofk/config`。
## CLI 用法
```
rofk -proxlist -ip [options] [nmap-flags...]
```
| 标志 | 描述 |
|------|-------------|
| `-proxlist file` | 代理列表(每行一个:`socks5://host:port`、`host:port` 等) |
| `-ip host` | 目标主机、IP 或 CIDR。也可作为位置参数接受。 |
| `-p ports` | 端口规格:`80,443` 或 `1-1024` |
| `-out file` | 输出文件路径;使用 `-` 输出到 stdout |
| `-type fmt` | `txt`(默认)· `json` · `xml` · `csv` |
| `-tool name` | `builtin`(默认,始终通过代理)· `nmap`(可选;对 CIDR 发出警告) |
| `-confirm N` | 内置法定人数:必须同意端口开放的代理数量(默认:1) |
| `-conc N` | 并发拨号,仅适用于内置扫描器(默认:200) |
| `-timeout sec` | 连接超时(默认:5) |
| `-rotate` / `-no-rotate` | 在目标之间轮换代理(默认:开启) |
| `-nmap-path path` | nmap 二进制文件的路径(保存到配置) |
**任何未在上面列出的标志都将原样转发给 nmap**(仅在 `-tool nmap` 时使用)— `-sV`、`-A`、`-T4`、`--script`、`-oX` 等。
### 示例
```
# 内置扫描(默认):始终通过代理,并进行 service/version 检测
rofk -proxlist ~/proxies.txt -ip 192.168.1.2 -p 80,443
# 要求 2 个代理一致同意端口开放(以防范撒谎的代理)
rofk -proxlist ~/proxies.txt -ip target.com -p 1-1024 -confirm 2
# 选择使用 nmap 对特定范围进行 version detection / NSE(参见上方的 CIDR 警告)
rofk -proxlist ~/proxies.txt -ip 10.0.0.0/24 -p 1-1024 -tool nmap -sV \
-type json -out results.json
```
### 旧版子命令(仍然有效)
```
rofk validate -f raw.txt -o live.txt -t 200 -T 8
rofk scan -pool live.txt -target host -tool nmap
rofk man
rofk help
```
## GUI
不带参数运行:
```
rofk
```
**Proxies 标签页** — 粘贴或导入代理列表,并发验证,导出存活代理。
**Scanner 标签页** — 配置目标、端口(带有“添加常用端口”开关)、时序预设(T3/T4/T5)、**扫描模式**(Fast/Confirmed/Paranoid 开放端口确认),以及可选的**代理消耗保护**(按代理设置复用间隔),并附带实时日志。
**Hosts 标签页** — Zenmap 风格的三窗格下钻:选择一个主机 → 查看其去重后的开放端口(可按端口、服务或代理数量排序)→ 点击端口以列出验证它的每个代理,包括服务、版本、banner 和出口国家。**Check geo-block** 按钮会从您代理池中的每个国家探测该端口,并报告其是否看起来被地理封锁。
**Settings 标签页** — nmap 路径检测、验证设置和自动重新验证间隔。
## 代理格式
```
host:port
socks4://host:port
socks5://host:port
socks5://user:pass@host:port
host:port:user:pass
```
## 从源码构建
需要 [Go 1.25+](https://go.dev/dl/)。
```
git clone https://github.com/LegitDecent/route-fork
cd route-fork
make install # build + install binary + man page
# 或
go build -o rofk .
```
## 开发
```
go test ./...
```
测试涵盖了 SOCKS4/5 握手和代理拨号逻辑、本地中继(转发路径、SOCKS4a 主机名处理、失败行为)、端口扫描器(开放/关闭端口、按连接跟踪代理、上下文取消)、完整的 Go 原生扫描编排(`RunScan`/`RotateScan`)以及通过注入的 mock dialer 进行的区域封锁检测、GUI 扫描控制器胶水代码(目标组装、扫描模式→法定人数映射、范围扫描日志抑制、摘要渲染)作为纯函数、服务探测器(banner 解析以及通过 `net.Pipe` 进行的实时 HTTP/TLS 探测)、法定人数决策和消耗保护节流阀、代理错误分类器、离线 geo 查询以及池管理。所有测试均使用本地 mock 服务器,无需外部网络访问;`golangci-lint` 运行无报错。
CI 还会在每次推送和 pull request 时运行 [`govulncheck`](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck),从而自动捕获依赖项中的已知漏洞。
内置的 IP 到国家的数据(`geo/`)是来自 [sapics/ip-location-db](https://github.com/sapics/ip-location-db) 的 GeoFeed + Whois + ASN 数据库,由 [NRO](https://www.nro.net/) 采用 CC BY 4.0 许可。请参见 `geo/ATTRIBUTION.md`。
## 法律声明
此工具仅供**授权的安全测试使用**。
在大多数司法管辖区,未经明确许可扫描系统是非法的。
您需对自己的行为负责。作者不对滥用行为承担责任。
## 许可证
[Apache License 2.0](LICENSE)。按“原样”提供,不提供任何形式的保证;请参见许可证中的免责声明和责任限制部分。
标签:EVTX分析, 日志审计