Assem-Elmasri/Port-Scanner

GitHub: Assem-Elmasri/Port-Scanner

一个零依赖的 Go 语言并发 TCP 端口扫描器,支持主机名解析和进度条显示,适合快速发现目标开放端口。

Stars: 0 | Forks: 1

# 🔍 端口扫描器 一个用 Go 构建的快速、并发 TCP 端口扫描器。支持单端口检查、带有实时进度条的范围扫描以及自动主机名解析。 ## 功能特性 - **并发扫描** — 使用 goroutines 同时扫描数千个端口 - **主机名支持** — 接受 IP 地址和主机名(通过 DNS 自动解析) - **进度条** — 范围扫描期间的视觉进度指示器 - **结果排序** — 开放端口以整洁的排序表格显示 - **可配置超时** — 调整每个端口的超时时间,以实现快速或彻底的扫描 - **零依赖** — 完全使用 Go 标准库构建 ## 安装 ``` git clone https://github.com/Assem-Elmasri/Port-Scanner.git cd Port-Scanner go build -o portscanner main.go ``` ## 使用方法 ``` # 扫描端口范围 ./portscanner -target scanme.nmap.org -start 1 -end 1000 # 扫描单个端口 ./portscanner -target 192.168.1.1 -start 80 # 使用自定义 timeout 扫描 (默认: 1s) ./portscanner -target 10.0.0.1 -start 1 -end 65535 -timeout 2 ``` ### 参数标志 | 标志 | 默认值 | 必需 | 描述 | | ---------- | ------- | -------- | ------------------------------------ | | `-target` | — | ✅ | 目标 IP 地址或主机名 | | `-start` | `1` | — | 起始端口(或要扫描的单个端口) | | `-end` | `0` | — | 结束端口(单端口扫描时省略) | | `-timeout` | `1` | — | 每个端口的超时时间(秒) | ## 输出示例 ### 范围扫描 ``` Resolved scanme.nmap.org -> 45.33.32.156 Scanning 45.33.32.156:1-100 Found 2 open port(s): PORT STATUS ──────────────────── 22 open 80 open Scan completed in 100 ports ``` ### 单端口扫描 ``` Scanning 127.0.0.1:80 ✓ Port 80 is open ``` ## 工作原理 1. **目标解析** — 如果提供了主机名,则通过 `net.LookupHost` 将其解析为 IP 2. **并发扫描** — 每个端口都在自己的 goroutine 中使用带有可配置超时的 `net.Dialer` 进行扫描 3. **线程安全收集** — 使用受互斥锁保护的 slice 收集开放端口 4. **进度追踪** — 原子计数器在 stderr 上驱动实时进度条 5. **清晰输出** — 所有扫描完成后,结果经过排序并以格式化表格显示 ## 技术栈 - **语言**: Go - **并发**: `sync.WaitGroup`, `sync.Mutex`, `sync/atomic` - **网络**: `net.Dialer` (TCP 连接扫描) - **CLI**: `flag` (标准库)
标签:CLI, DNS解析, EVTX分析, Golang, Go语言, TCP扫描, WiFi技术, 二进制发布, 安全编程, 密码管理, 并发扫描, 开发运维, 开源工具, 开源项目, 批量查询, 插件系统, 数据统计, 日志审计, 程序破解, 端口扫描, 网络安全, 网络枚举, 资产探测, 隐私保护