moveeeax/portping

GitHub: moveeeax/portping

一个用 Go 编写的并发 TCP 端口可达性扫描器,支持 CIDR 展开与多种输出格式,用于快速批量检测网络连通性。

Stars: 0 | Forks: 0

# portping `portping` 是一个小巧且并发的 TCP 可达性扫描器。它通过一个有限大小的 worker pool 来探测 `host:port` 目标,测量连接延迟,并将结果以对齐的表格或 JSON 数组的形式输出。 它非常适合用于快速的网络检查:确认防火墙更改、验证服务是否在整个子网中监听,或者扫描主机上的某个端口范围。 ## 安装 ``` go install github.com/moveeeax/portping@latest ``` 或者从检出的代码中构建: ``` go build -o portping . ``` 要求 Go 1.17 或更高版本。无第三方依赖。 ## 用法 ``` usage: portping [flags] target [target ...] A target is HOST:PORTS, where HOST may be a hostname, IP, or IPv4 CIDR and PORTS may be a list and/or range, e.g. 10.0.0.0/28:22,80,8000-8010 ``` ### 目标 目标被书写为 `HOST:PORTS` 的形式: - **HOST** — 主机名(`example.com`)、IP 字面量(`10.0.0.5`、`[::1]`)或 IPv4 CIDR 块(`10.0.0.0/28`)。 - **PORTS** — 逗号分隔的端口和/或范围列表,例如 `22`、`22,80,443` 或 `8000-8010`。 CIDR 展开会针对 `/30` 及更短的前缀排除网络地址和广播地址。`/31` 会生成两个地址(RFC 3021 点对点),而 `/32` 会生成单个主机地址。 目标可以通过参数传递、使用 `--file` 从文件读取,或者通过管道输入到 stdin(`--file -`,或者直接不提供参数)。在文件和 stdin 中,空行和以 `#` 开头的行会被忽略,并且一行中以空格分隔的多个目标都会被读取。 ### Flags | Flag | 默认值 | 描述 | | --- | --- | --- | | `--timeout` | `2s` | 每次连接的超时时间。 | | `--concurrency` | `64` | 并发 worker 的数量。 | | `--count` | `1` | 在宣布目标不可达之前的连接尝试次数。 | | `--json` | `false` | 以 JSON 数组形式输出结果。 | | `--open-only` | `false` | 仅报告可达的目标。 | | `--file` | | 从文件中读取目标(`-` 表示从 stdin 读取)。 | | `--fail-on-unreachable` | `true` | 如果有任何目标不可达,则以非零状态码退出。 | ### 退出码 - `0` — 所有探测的目标均可达(或者设置了 `--fail-on-unreachable=false`)。 - `1` — 一个或多个目标不可达。 - `2` — 无效的参数或目标。 ## 示例 扫描 localhost 上的几个端口: ``` $ portping 127.0.0.1:22,80,443 TARGET STATE LATENCY ATTEMPTS DETAIL 127.0.0.1:22 open 0.3ms 1 127.0.0.1:80 closed - 1 dial tcp 127.0.0.1:80: connect: connection refused 127.0.0.1:443 closed - 1 dial tcp 127.0.0.1:443: connect: connection refused ``` 以极短的超时时间扫描 /28 网段中的 SSH 端口,仅显示有响应的结果: ``` $ portping --timeout 300ms --open-only 10.0.0.0/28:22 ``` 输出 JSON 以便进一步处理: ``` $ portping --json 10.0.0.0/30:22,80 ``` 从 stdin 读取目标: ``` $ printf '10.0.0.1:22\n10.0.0.2:80\n' | portping --file - ``` ## 目录结构 - `internal/scan` — 纯粹的目标解析、CIDR/端口展开、结果聚合以及 worker pool。 - `internal/probe` — 通过可注入的 `Dialer` 接口进行 TCP 连接,以提高可测试性。 - `main.go` — 命令行界面。 ## 许可证 MIT。详见 [LICENSE](LICENSE)。
标签:EVTX分析, Go, Ruby工具, TCP, 并发探测, 数据统计, 日志审计, 端口扫描, 网络工具