kristiyan-donchev/port-scanner
GitHub: kristiyan-donchev/port-scanner
一个基于 Python 的多线程 TCP 端口扫描器,支持全连接扫描与 SYN 半开扫描,可发现开放端口并抓取服务 banner。
Stars: 0 | Forks: 0
# 端口扫描器
一个使用 Python 编写的多线程 TCP 端口扫描器。它扫描目标主机的开放端口,通过已知端口表识别可能运行的服务,并尝试进行轻量级的 banner grabbing 以获取额外的指纹细节。通过 Scapy 还包含一个可选的 raw-socket SYN(半开)扫描模式。
## 功能
- 使用 Python 的 `socket` 模块执行 **TCP connect scan**,支持可配置的端口范围,并通过线程池实现并行化以提高速度。
- 在包含常见服务(SSH、HTTP、MySQL、RDP 等)的端口表中查找每个开放端口,并尝试通过读取初始响应(并且对于少数已知端口,会进行轻微探测)来 **抓取 banner**。
- 可选地使用 Scapy 执行 **SYN scan** (`--syn`),该模式发送原始 SYN 数据包并检查响应标志,而无需完成 TCP 握手——比完整的连接扫描更快、更隐蔽,但需要 root/管理员权限以及安装 Scapy。
- 可以使用 `-o/--output` 将纯文本结果报告写入文件。
## 技术 / 方法
- **编程语言:** Python 3.9+
- **核心扫描:** 使用 `socket` 和 `concurrent.futures.ThreadPoolExecutor` 进行并发连接尝试,每次尝试都有独立的超时设置。
- **Banner grabbing:** 在成功执行 `connect()` 后,该工具可以选择性地为那些不主动通告自身的端口发送最小的协议探测(例如 `HEAD / HTTP/1.0`),然后读取服务返回的任何内容。
- **SYN scan(可选):** 基于 Scapy 的 `sr1()` 构建,每个端口发送单个 SYN 数据包,并根据 SYN/ACK (0x12) 响应将端口分类为开放状态,随后发送 RST 以避免留下半开连接。
## 设置
```
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
```
仅当您计划使用 `--syn` 时才需要 `scapy`。默认的 connect scan 模式除了标准库之外,没有其他第三方依赖。
## 使用方法
```
# 扫描目标的默认范围 (1-1024)
python3 port_scanner.py 192.168.1.10
# 扫描指定端口 / 范围
python3 port_scanner.py scanme.example.com -p 22,80,443,8000-8100
# 调整 concurrency 和 timeout,将结果保存到文件
python3 port_scanner.py 10.0.0.5 -p 1-65535 -w 500 -t 0.5 -o results.txt
# SYN scan (需要 root/admin + scapy)
sudo python3 port_scanner.py 10.0.0.5 -p 1-1024 --syn
```
### 选项
| 标志 | 描述 | 默认值 |
|---|---|---|
| `-p, --ports` | 要扫描的端口,例如 `22,80,443` 或 `1-1024` | `1-1024` |
| `-t, --timeout` | 每次连接超时时间(秒) | `0.75` |
| `-w, --workers` | 并发线程数 | `200` |
| `--syn` | 通过 Scapy 使用原始 SYN 扫描而不是 connect scan | 关闭 |
| `-o, --output` | 将结果写入文本文件 | 无 |
## 限制
- connect scan 比真正的 SYN scan 更容易被发现且速度更慢——它会为每个开放端口完成完整的 TCP 握手,这很容易被目标机器及其前端的任何 IDS 记录。
- Banner grabbing 是尽力而为的:许多服务(或者任何位于限制速率或丢弃未经请求探测的防火墙/代理后面的服务)不会返回任何有用的信息。
- SYN scan 模式需要 raw socket 权限(Linux/macOS 上的 root 权限,Windows 上的管理员权限 + Npcap),并且并非在所有平台上都受支持。
- 这是一个作品集/教育用途的工具,不能替代像 Nmap 这样成熟的扫描器——它不支持 OS 指纹识别、静态表之外的服务版本检测,也不支持 UDP 扫描。
## 许可证
MIT — 详情请参阅仓库。请负责任地使用。
标签:Python, Scapy, TCP/IP, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 逆向工具, 隐私保护