SKJ57/port-scanner
GitHub: SKJ57/port-scanner
一个基于 Python 标准库的多线程 TCP 端口扫描器,帮助用户在授权范围内探测端口开放状态并理解网络编程与并发机制。
Stars: 0 | Forks: 1
# 端口扫描器
一个使用 Python 编写的轻量级、多线程 TCP 端口扫描器,仅使用标准库。作为学习项目开发,旨在帮助理解 TCP 握手、socket 编程以及网络安全背景下的并发机制。
## ⚠️ 法律免责声明
仅扫描您拥有或获得**明确书面测试授权**的主机。在未经授权的情况下扫描系统在大多数国家是非法的(例如根据美国《计算机欺诈和滥用法》),并且可能违反您的 ISP 的服务条款。
[scanme.nmap.org](https://scanme.nmap.org) 由 Nmap 项目专门提供,用于练习此类工具,可安全用于测试。
## 功能
- **多线程扫描** — 并发扫描数百个端口,而非顺序扫描
- **灵活的端口指定** — 单个端口、逗号分隔的列表、范围或混合形式(`22,80,1000-2000`)
- **Banner 抓取** — 当服务在连接时发送服务 banner(例如 SSH 版本字符串)时将其捕获
- **常见服务名称查询** — 将知名端口映射到其典型服务(尽力而为,基于惯例,未经实际验证)
- **可配置的 timeout 和线程数** — 根据网络状况在速度与可靠性之间进行调节
## 工作原理
扫描器执行 **TCP connect 扫描**:对于每个端口,它使用 Python 的 `socket.connect_ex()` 尝试完整的 TCP 三次握手(`SYN` → `SYN-ACK` → `ACK`)。如果握手完成,则端口处于开放状态。这是最简单且最具可移植性的扫描类型——与原始 SYN(“隐蔽”)扫描不同,它不需要提升权限——但它也是最容易检测到的,因为它会在目标上留下完全记录的连接。
## 安装
要求 Python 3.7+。扫描器本身没有外部依赖。
```
git clone https://github.com/YOUR_USERNAME/port-scanner.git
cd port-scanner
```
要运行测试套件,请安装开发依赖:
```
pip install -r requirements-dev.txt
```
## 用法
```
python3 port_scanner.py -t -p [options]
```
### 示例
扫描 Nmap 测试主机的前 1000 个端口:
```
python3 port_scanner.py -t scanme.nmap.org -p 1-1000
```
扫描特定端口:
```
python3 port_scanner.py -t 192.168.1.1 -p 22,80,443
```
扫描所有端口并使用更多线程以提高速度:
```
python3 port_scanner.py -t 127.0.0.1 -p 1-65535 --threads 200
```
### 选项
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `-t`, `--target` | 目标主机(IP 或域名)— **必填** | — |
| `-p`, `--ports` | 要扫描的端口:`80`、`22,80,443` 或 `1-1000` | `1-1024` |
| `--timeout` | Socket timeout(以秒为单位) | `0.5` |
| `--threads` | 并发线程数 | `100` |
### 输出示例
```
=======================================================
Scanning target : scanme.nmap.org (45.33.32.156)
Port range : 1-100 (100 ports)
Started at : 2026-07-06 12:00:00.000000
=======================================================
[+] Port 22 OPEN (SSH) | SSH-2.0-OpenSSH_6.6.1p1 Ubuntu
[+] Port 80 OPEN (HTTP)
=======================================================
Scan finished in 1.42 seconds
Open ports found: [22, 80]
=======================================================
```
## 运行测试
```
pip install -r requirements-dev.txt
pytest tests/ -v
```
测试会在 `127.0.0.1` 上启动真实的本地 TCP 监听器,而不是模拟 socket,因此它们能测试真实的连接行为。
## 路线图 / 扩展思路
- [ ] UDP 扫描模式
- [ ] Raw-socket SYN(“隐蔽”)扫描模式
- [ ] 将结果导出为 JSON/CSV
- [ ] 支持 CIDR 范围以扫描多个主机
- [ ] 通过 TTL 分析进行基本的 OS 指纹识别
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:DNS查询工具, Python, TCP协议, 安全规则引擎, 插件系统, 无后门, 端口扫描器, 网络安全, 网络编程, 逆向工具, 隐私保护