amitheffect/port-scanner-tool
GitHub: amitheffect/port-scanner-tool
一个基于 Python 标准库的零依赖 TCP 端口扫描器,支持多线程并发、Banner 抓取和子网扫描。
Stars: 0 | Forks: 0
# 🔍 端口扫描器

## 功能
- **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连接, 二进制发布, 互联网资产, 密码管理, 开源工具, 插件系统, 数据泄露防护, 数据统计, 无后门, 服务器安全, 服务识别, 白盒测试, 端口扫描, 网络安全, 网络探测, 网络编程, 逆向工具, 隐私保护