dariushoule/porty-aio
GitHub: dariushoule/porty-aio
一款零依赖、静态编译的跨平台 TCP 端口扫描与转发工具,无需 root 权限和原生抓包库即可在任何主机上运行。
Stars: 0 | Forks: 0
# porty-aio
一款紧凑、零依赖、跨平台的网络工具,可在任何地方直接运行。
单一静态二进制文件。无需 libpcap,无需 Npcap,无需 glibc 绑定,无需 root 权限。它的核心是一个 TCP connect 扫描器,不需要原始套接字或抓包库,此外还包含一个简单的单机 TCP 端口转发器。只需一次 `go build` 即可生成一个二进制文件,你可以直接将其投放并运行在任何 Linux、Windows 或 macOS 主机上。
## 为什么仅使用 connect 扫描
TCP connect 扫描是唯一一种需要零特权和零原生依赖的扫描模式。坚持这一模式使得 porty-aio 能够成为一个完全静态的二进制文件。
## 构建(Docker 化,无需本地 Go 工具链)
你只需要 Docker。Go 版本在 `Dockerfile` 中被固定。升级只需修改那一行即可。
```
# Linux / macOS
./scripts/build.sh
# Windows
.\scripts\build.ps1
```
二进制文件将输出到 `./dist` 目录,每个目标平台一个文件。例如
`porty-aio_linux_amd64` 和 `porty-aio_windows_amd64.exe`。
二进制文件经过 UPX 压缩以最小化体积(约为未压缩大小的三分之一)。macOS(代码签名会拒绝压缩后的二进制文件)和 windows/arm64(UPX 不支持)会跳过 UPX 压缩,因此这些目标平台以未压缩形式发布,体积会更大。传入 `UPX=0` 可在所有平台上进行未压缩的构建。
标记版本或缩小目标平台矩阵:
```
VERSION=0.1.0 ./scripts/build.sh
TARGETS="linux/amd64 windows/amd64" ./scripts/build.sh
```
```
$env:VERSION="0.1.0"; .\scripts\build.ps1
$env:TARGETS="linux/amd64 windows/amd64"; .\scripts\build.ps1
```
验证 Linux 产物是否为真正的静态链接:
```
docker run --rm -v "$PWD/dist":/d alpine sh -c 'apk add -q file && file /d/porty-aio_linux_amd64'
# => ... 静态链接 ...
```
## 测试
测试在同一构建容器中运行,因此无需本地 Go 工具链:
```
# Linux / macOS
./scripts/test.sh
# Windows
.\scripts\test.ps1
```
这涵盖了端口/目标/CIDR 解析的单元测试,以及一个集成测试,该测试会启动真实的回环监听器,并断言扫描器报告出完全一致的开放端口集合。
## 用法
```
porty-aio [flags]
host, IP, or CIDR (comma-separated): 10.0.0.0/24,host.lan
flags:
-p ports: 'top', 'all' (or '-'), '22,80,443', or '1-1024' (default "top")
-c maximum concurrent connections (default 512)
-t per-connection timeout (default 1.5s)
-json emit results as JSON lines
-version
```
标志参数必须位于目标之前(标准的 Go flag 解析会在遇到第一个非标志参数时停止)。
示例:
```
porty-aio 10.0.0.0/24
porty-aio -p 1-65535 -c 1024 192.168.1.10
porty-aio -p 22,80,443 -json 10.0.0.0/24 > open.jsonl
```
## 转发
在主机上运行 porty,将本地监听器中继到目标地址,该目标地址可以是同一主机上仅限回环的服务,也可以是该主机能够访问到的另一台机器。
没有隧道,也不需要第二个实例。
```
porty-aio forward --listen --to [--listen ... --to ...]
```
```
# 将另一台机器的服务暴露到本机
porty-aio forward --listen :8080 --to 10.0.0.5:80
# 将仅限 loopback 的服务暴露到网络
porty-aio forward --listen :3306 --to 127.0.0.1:3306
# 同时进行多个转发
porty-aio forward --listen :8080 --to 10.0.0.5:80 --listen :2222 --to 10.0.0.9:22
```
当省略主机地址时(`:8080`),`--listen` 会绑定到所有网络接口;指定主机地址则绑定到单个网络接口(`127.0.0.1:8080`)。仅支持 TCP。
## 布局
```
cmd/porty-aio/ CLI entry point (scan + forward subcommands)
internal/scan/ stdlib-only connect-scan engine
internal/forward/ stdlib-only TCP port forwarder
Dockerfile pinned Go toolchain (single source of truth for the version)
scripts/
build.sh host wrapper (Linux/macOS)
build.ps1 host wrapper (Windows)
build-matrix.sh in-container cross-compile loop (the real build logic)
test.sh / test.ps1 run the test suite in the build container
```
标签:EVTX分析, Go语言, TCP, 插件系统, 数据统计, 日志审计, 程序破解, 端口扫描, 网络工具, 请求拦截, 静态二进制