yesshhaa/Port-Scanner
GitHub: yesshhaa/Port-Scanner
基于 asyncio 的并发 TCP 端口扫描器,集成 Banner 抓取、风险分级、CVE 提示和 MITRE ATT&CK 映射,支持结构化报告导出。
Stars: 0 | Forks: 0
# 🔍 异步 TCP 端口扫描器




## 📌 功能简介
大多数作品集中的端口扫描器只是简单的 socket 循环——一次扫描一个端口,速度慢且缺乏上下文。
这个工具与众不同:
- **异步并发** — 使用 `asyncio` 同时扫描数百个端口,而不是逐一扫描
- **Banner 抓取** — 读取服务问候字符串(例如 `SSH-2.0-OpenSSH_8.9p1`)以识别确切的软件版本
- **风险分类** — 根据已知的威胁暴露情况,将每个开放端口标记为 CRITICAL / HIGH / MEDIUM / LOW
- **CVE 提示** — 为 SMB、RDP、Telnet、FTP 等高风险服务预置了 CVE 参考
- **MITRE ATT&CK 映射** — 每次扫描都会生成一份 T1046 威胁上下文报告
- **JSON + CSV 导出** — 结构化输出,可直接导入 SIEM 或用于进一步分析
## 🚀 快速开始
```
# clone 该 repo
git clone https://github.com/yesshhaa/port-scanner
cd port-scanner
# 创建并激活 virtual environment
python -m venv venv
.\venv\Scripts\Activate.ps1 # Windows
source venv/bin/activate # Mac/Linux
# 可选:彩色 terminal 输出
pip install rich
# 运行它
python scanner.py localhost
```
## 使用方法
```
# 扫描常用 ports(默认)
python scanner.py
# 扫描一个 port 范围
python scanner.py -p 1-1024
# 扫描特定 ports
python scanner.py -p 22,80,443,3306,3389
# 更快的扫描,跳过 banner grabbing
python scanner.py -p 1-1024 -t 0.3 --no-banners
# 自定义 output directory
python scanner.py -o ./reports
```
### CLI 标志
| 标志 | 默认值 | 描述 |
|------|---------|-------------|
| `host` | 必填 | 目标 IP 或主机名 |
| `-p, --ports` | `common` | 端口范围:`1-1024`, `22,80,443` 或 `common` |
| `-c, --concurrency` | `300` | 最大并发连接数 |
| `-t, --timeout` | `1.0` | 连接超时时间(秒) |
| `--no-banners` | 关闭 | 跳过 Banner 抓取(速度更快) |
| `-o, --output` | `outputs/` | 保存报告的目录 |
## 输出示例
```
╔══════════════════════════════════════════╗
║ ASYNC TCP PORT SCANNER | T1046 ║
║ github.com/yesshhaa ║
╚══════════════════════════════════════════╝
[*] Scanning 192.168.56.101 — 23 ports | concurrency=300
[+] Scan complete in 1.43s | 6 open port(s) found
[+] JSON report saved → outputs/scan_192_168_56_101_20260623.json
[+] CSV report saved → outputs/scan_192_168_56_101_20260623.csv
══════════════════════════════════════════════════════
MITRE ATT&CK CONTEXT
Technique : T1046 — Network Service Discovery
Tactic : Discovery
Reference : https://attack.mitre.org/techniques/T1046/
══════════════════════════════════════════════════════
PORT SERVICE RISK CVE HINTS
--------------------------------------------------
23 telnet CRITICAL CVE-2020-10188
445 smb CRITICAL CVE-2017-0144, CVE-2020-0796
21 ftp HIGH CVE-2010-2075, CVE-2011-2523
3306 mysql HIGH CVE-2012-2122
22 ssh MEDIUM CVE-2023-38408
80 http MEDIUM —
```
## 📁 项目结构
```
port-scanner/
├── scanner.py # core async scanner + CLI entrypoint
├── services.py # port → service name, risk level, CVE hints
├── report.py # JSON/CSV export + MITRE ATT&CK report
└── requirements.txt # rich (optional)
```
## 🎯 MITRE ATT&CK — T1046
| 字段 | 值 |
|-------|-------|
| **技术 ID** | T1046 |
| **名称** | 网络服务发现 (Network Service Discovery) |
| **战术** | 发现 (TA0007) |
| **参考** | [attack.mitre.org/techniques/T1046](https://attack.mitre.org/techniques/T1046/) |
攻击者在进行横向移动或漏洞利用之前,会扫描开放端口和运行中的服务。此工具在受控环境中复制了该行为,旨在用于教育和防御性研究目的。
**检测方法:** 针对 SYN 扫描发出警报——单一来源在 60 秒内命中 20 个或以上的唯一目标端口。Snort 和 Suricata 等 IDS 工具内置了针对此模式的签名。
## 🧰 技术栈
- **Python 3.10+** — 仅使用标准库 (`asyncio`, `socket`, `json`, `csv`, `argparse`, `datetime`)
- **rich** *(可选)* — 彩色终端输出
运行核心扫描器不需要任何外部依赖。
本工具仅供**教育目的和授权的安全测试使用。**
请仅扫描您拥有或获得明确书面测试许可的主机。
未经授权的端口扫描可能会违反您所在国家/地区的 CFAA 及相关法律。
标签:Python, 异步编程, 插件系统, 数据统计, 无后门, 漏洞审计, 端口扫描, 计算机取证, 逆向工具