antwnakys/port-scanner
GitHub: antwnakys/port-scanner
一个仅依赖 Python 标准库的并发 TCP 端口扫描器,支持 banner 抓取与 Markdown 报告生成,专注于授权安全测试场景。
Stars: 0 | Forks: 0
# 🛰️ port-scanner
一个快速、并发的 **TCP 端口扫描器**,支持 banner grabbing 并生成整洁的
Markdown 报告 —— 基于 Python sockets 从零构建,无需任何外部扫描
工具。
```
# 端口扫描报告 — scanme.nmap.org
- **Target:** `scanme.nmap.org` (45.33.32.156)
- **Open ports:** 2
## 开放端口
| Port | Service | Banner |
| ---- | ------- | ------ |
| 22 | ssh | SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.13 |
| 80 | http | — |
```
## 工作原理
它执行 **TCP connect 扫描**:对于每个端口,它会尝试完成完整的 TCP
三次握手(这与任何普通客户端的行为完全一致)。如果握手
成功,则该端口为开放状态。这是最可靠的扫描类型,并且不需要
特殊权限 —— 这与 SYN(“半开”)扫描不同,后者需要 raw
sockets 和 root 权限。
两个设计选择使其既快速又实用:
- **并发。** 扫描几乎完全是在*等待网络响应*,因此
工作被分配到了一个线程池中 —— 可以并行探测数百个端口,
将耗时数分钟的顺序扫描缩短至几秒钟。
- **Banner grabbing。** 当端口开放时,扫描器会读取服务的
问候语(SSH、SMTP 和 FTP 都会自我声明),这通常会揭示
确切的软件及其版本 —— 这对于指纹识别非常有用。
随后,报告会标记出那些通常需要仔细检查的端口 —— 明文
协议(Telnet、FTP)、暴露的数据库(MySQL、Redis、MongoDB)以及
远程访问服务(RDP)。
## 用法
```
# 扫描前 20 个常用端口(Nmap project 提供的安全测试主机):
python -m portscan scanme.nmap.org
# 扫描端口范围:
python -m portscan 192.168.1.1 -p 1-1024
# 扫描特定列表并保存 Markdown 报告:
python -m portscan example.com -p 22,80,443 -o report.md
```
`scanme.nmap.org` 是 Nmap 项目**明确允许**进行扫描的主机,因此
你可以安全地试用该工具,而不会影响任何其他人的系统。
在扫描之前,该工具会要求你确认已获得授权(在脚本中传递 `--yes` 以
跳过提示)。端口规范使用熟悉的语法:`80`、`1-1024`、
`22,80,443`,或它们的任意组合。
## 运行测试
```
pip install pytest
pytest
```
这些测试**完全离线**运行 —— 端口规范解析、服务命名、报告
渲染以及扫描聚合器都已通过对网络探测进行 monkeypatch 完成了测试,因此在 `pytest` 期间不会发生真实的扫描行为。
## 项目布局
```
port-scanner/
├── portscan/
│ ├── scanner.py # concurrent TCP connect scan + banner grabbing
│ ├── ports.py # nmap-style port-spec parsing (80, 1-1024, 22,80,443)
│ ├── report.py # Markdown report with risk annotations
│ └── cli.py # command-line interface + authorization prompt
└── tests/ # pytest suite (network mocked)
```
## 无外部依赖
扫描器本身仅使用 Python 标准库(`socket`、
`concurrent.futures`)。只有在运行测试时才需要 `pytest`。
## 限制与道德规范
- 仅支持 TCP connect 扫描(不支持 UDP 或 SYN 扫描)。
- 服务列表是常用端口的子集,而不是完整的 IANA 注册表。
- 这是一个用于**已授权**测试的学习工具 —— 刻意没有
为其设计隐蔽或规避功能。
## 许可证
[MIT](LICENSE) — 可免费使用、学习并在此基础上进行开发。
标签:Banner抓取, Python, 安全规则引擎, 插件系统, 数据统计, 无后门, 端口扫描, 逆向工具