yesshhaa/Port-Scanner

GitHub: yesshhaa/Port-Scanner

基于 asyncio 的并发 TCP 端口扫描器,集成 Banner 抓取、风险分级、CVE 提示和 MITRE ATT&CK 映射,支持结构化报告导出。

Stars: 0 | Forks: 0

# 🔍 异步 TCP 端口扫描器 ![Python](https://img.shields.io/badge/Python-3.10+-blue?style=flat&logo=python) ![License](https://img.shields.io/badge/License-MIT-green?style=flat) ![MITRE](https://img.shields.io/badge/MITRE-T1046-red?style=flat) ![Status](https://img.shields.io/badge/Status-Active-brightgreen?style=flat) ## 📌 功能简介 大多数作品集中的端口扫描器只是简单的 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, 异步编程, 插件系统, 数据统计, 无后门, 漏洞审计, 端口扫描, 计算机取证, 逆向工具