amitheffect/port-scanner-tool

GitHub: amitheffect/port-scanner-tool

一个基于 Python 标准库的零依赖 TCP 端口扫描器,支持多线程并发、Banner 抓取和子网扫描。

Stars: 0 | Forks: 0

# 🔍 端口扫描器 ![Alt text](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0e99833d78053755.png) ## 功能 - **TCP Connect 扫描** — 通过 `socket` 进行可靠的 SYN 样式连接探测 - **多线程** — 支持配置线程数(默认值:100)的并发扫描 - **Banner 抓取** — 使用 `--banner` 从开放端口获取实时服务 Banner - **CIDR / 子网支持** — 扫描整个网络,例如 `192.168.1.0/24` - **Top 100 端口模式** — 使用 `--top-ports` 快速扫描最常见的端口 - **灵活的端口输入** — 支持单个端口、范围或逗号分隔的列表 - **服务识别** — 将 60 多个知名端口映射到其服务名称 - **文件输出** — 使用 `--output` 将扫描报告保存为 `.txt` 文件 - **彩色终端 UI** — 使用 ANSI 颜色输出清晰、可读的结果 ## 环境要求 - Python 3.10+ - 无需外部依赖 — 仅使用 Python 标准库 ``` python --version # must be 3.10 or higher ``` ## 安装 # 克隆仓库 ``` git clone https://github.com/amitheffect/port-scanner.git cd port-scanner ``` # 无需 pip install — 零依赖! ## 用法 ``` python port_scanner.py -t [options] ``` ### 参数 | 标志 | 长格式 | 描述 | 默认值 | |------|-----------|-------------|---------| | `-t` | `--target` | 目标 IP、主机名或 CIDR 范围 | *(必需)* | | `-p` | `--ports` | 端口:`80`、`1-1000` 或 `22,80,443` | `1-1024` | | | `--top-ports` | 扫描前 100 个最常用的端口 | `False` | | | `--timeout` | 连接超时时间(秒) | `1.0` | | | `--threads` | 并发线程数 | `100` | | | `--banner` | 从开放端口抓取服务 Banner | `False` | | | `--output` | 将结果保存到文件(例如 `report.txt`) | `None` | ## 示例 **基本扫描(端口 1–1024):** ``` python port_scanner.py -t 192.168.1.1 ``` **扫描主机名并使用自定义端口范围:** ``` python port_scanner.py -t scanme.nmap.org -p 1-1000 ``` **扫描特定端口并抓取 Banner:** ``` python port_scanner.py -t 10.0.0.1 -p 22,80,443,8080 --banner ``` **使用激进超时设置的快速 Top-100 扫描:** ``` python port_scanner.py -t 192.168.1.1 --top-ports --timeout 0.5 ``` **使用高线程数的子网扫描:** ``` python port_scanner.py -t 192.168.1.0/24 -p 80,443 --threads 200 ``` **完整扫描并保存结果到文件:** ``` python port_scanner.py -t 192.168.1.1 -p 1-65535 --threads 500 --output results.txt ``` ## 输出示例 ``` Target(s): 192.168.1.1 Ports : 1-1024 (1024 total) Timeout : 1.0s Threads : 100 Banner : No Started : 2026-03-07 14:32:01 [*] Scanning 192.168.1.1 ... ────────────────────────────────────────────────────────────── Scan Report for: 192.168.1.1 Scanned 1024 port(s) in 3.87s ────────────────────────────────────────────────────────────── PORT STATE SERVICE ──────────────────────────── 22 OPEN SSH 80 OPEN HTTP 443 OPEN HTTPS 8080 OPEN HTTP Proxy [+] 4 open port(s) found ────────────────────────────────────────────────────────────── ``` ## 已识别服务 该扫描器内置了 60 多种常见服务的映射,包括: | 端口 | 服务 | 端口 | 服务 | |------|---------|------|---------| | 21 | FTP | 3306 | MySQL | | 22 | SSH | 3389 | RDP | | 25 | SMTP | 5432 | PostgreSQL | | 53 | DNS | 5900 | VNC | | 80 | HTTP | 6379 | Redis | | 443 | HTTPS | 8080 | HTTP Proxy | | 445 | SMB | 27017 | MongoDB | | 1433 | MSSQL | 9200 | Elasticsearch | ## 项目结构 ``` port-scanner/ ├── port_scanner.py # Main scanner script └── README.md # This file └── LICENSE # MIT License └── PORTSC.png # Just a banner image ``` ## 工作原理 1. **目标解析** — 通过 DNS 将主机名解析为 IP;将 CIDR 范围展开为单独的主机 2. **端口扫描** — `ThreadPoolExecutor` 并行发起 TCP `connect_ex()` 探测 3. **服务检测** — 将开放端口与内置服务字典进行匹配,如果无法匹配则回退使用 `socket.getservbyport()` 4. **Banner 抓取** — 可选功能:重新连接到开放端口并发送探测以捕获服务问候信息 5. **报告生成** — 结果按端口号排序并输出到终端(可选择保存到磁盘) ## 局限性 - **仅支持 TCP** — 不支持 UDP 扫描 - **无 OS 指纹识别** — 专注于端口/服务发现 - **无隐蔽模式** — 使用完整的 TCP connect(无原始套接字 SYN 扫描) - **仅支持 IPv4** — 目前不支持 IPv6 目标 ## ⚠️ 法律免责声明 ## 许可证 MIT 许可证 — 详情见 `LICENSE`。
标签:Banner抓取, CIDR支持, Python, Python标准库, Qt框架, TCP连接, 二进制发布, 互联网资产, 密码管理, 开源工具, 插件系统, 数据泄露防护, 数据统计, 无后门, 服务器安全, 服务识别, 白盒测试, 端口扫描, 网络安全, 网络探测, 网络编程, 逆向工具, 隐私保护