Ha-Raouf/python-port-scanner

GitHub: Ha-Raouf/python-port-scanner

一个多线程 TCP 端口扫描器,支持 Banner 抓取、服务检测与 CSV/JSON 报告导出,帮助用户在教育及授权场景下快速发现开放端口。

Stars: 0 | Forks: 0

# Python 端口扫描器 一个使用 Python 构建的快速、多线程 TCP 端口扫描器,具备 banner 抓取、 服务检测、彩色输出、实时进度条以及 CSV/JSON 报告 导出功能。 本项目作为一个学习项目,旨在帮助理解网络基础知识(socket、 TCP 连接、并发),并开发出一个实用、可复用 的侦察工具。 ## 功能 - **多线程扫描** — 使用 `ThreadPoolExecutor` 并发扫描数百个端口,而不是逐个扫描 - **Banner 抓取** — 在可用时,从开放端口读取服务 banner(例如 `SSH-2.0-OpenSSH_8.9`) - **服务检测** — 即使没有 banner,也能将知名端口映射到服务名(HTTP、SSH、FTP、MySQL、RDP 等) - **CLI 接口** — 可配置目标、端口范围、线程数和超时时间,无需修改代码 - **彩色输出** — 突出显示开放端口以提高可读性 - **进度条** — 通过 `tqdm` 显示实时扫描进度 - **报告导出** — 将结果保存为带时间戳的 CSV 和/或 JSON 文件 - **输入验证** — 无效的目标或端口范围将显示清晰的错误信息,而不是直接崩溃 ## 项目结构 ``` port-scanner/ ├── scanner.py # Main entry point / CLI ├── banner.py # Banner grabbing logic ├── common_ports.py # Port -> service name lookup table ├── report.py # CSV / JSON export ├── utils.py # Input validation + colored output helpers ├── requirements.txt └── reports/ # Scan output files (created automatically) ``` ## 安装 ``` git clone https://github.com//port-scanner.git cd port-scanner pip install -r requirements.txt ``` ## 使用方法 ``` python scanner.py --target --ports [options] ``` ### 示例 扫描本机的前 1024 个端口: ``` python scanner.py --target 127.0.0.1 --ports 1-1024 ``` 扫描指定的单个端口: ``` python scanner.py --target 127.0.0.1 --ports 22 ``` 扫描远程练习目标(Nmap 的创建者明确允许对其进行公开扫描),使用更多线程并输出 JSON: ``` python scanner.py --target scanme.nmap.org --ports 1-1000 --threads 200 --format json ``` ### CLI 选项 | 标志 | 描述 | 默认值 | |---------------|---------------------------------------------------|---------| | `--target` | 目标 IP 地址或主机名 | 必填 | | `--ports` | 端口范围 (`1-1024`) 或单个端口 (`80`) | 必填 | | `--threads` | 并发线程数 | 100 | | `--timeout` | Socket 超时时间(秒) | 1.0 | | `--format` | 报告格式:`csv`、`json`、`both` 或 `none` | csv | ## 示例输出 ``` ============================================================ Python Port Scanner ============================================================ Target : scanme.nmap.org (45.33.32.156) Port range : 1-1000 ============================================================ Scanning: 100%|████████████████████| 1000/1000 [00:04<00:00, 224.31port/s] [OPEN] Port 22 | SSH | SSH-2.0-OpenSSH_6.6.1p1 [OPEN] Port 80 | HTTP | No banner received ============================================================ Scan complete: 2 open port(s) found in 4.46s ============================================================ [+] CSV report saved to: reports/scan_scanme.nmap.org_20260723_101530.csv ``` ## 工作原理 1. 将目标主机名解析为 IP 地址。 2. 将端口范围分配给一个工作线程池。 3. 每个线程尝试对其分配的端口发起 TCP 连接 (`connect_ex`)。 4. 如果连接成功,扫描器会尝试读取 banner,并 查找该端口的已知服务名。 5. 进度条会实时打印结果,随后将其导出到磁盘。 ## 法律与道德使用声明 本工具仅供教育目的及经授权的安全测试使用。 请仅扫描您拥有或获得明确书面测试权限的系统。 未经授权的端口扫描在您所在的司法管辖区可能属于违法行为。本 README 中的示例使用了 `scanme.nmap.org`,这是 Nmap 的创建者 明确提供用于公开扫描练习的主机。 ## 未来的改进方向 - 支持 UDP 扫描 - 使用 Async I/O (`asyncio`) 代替线程以实现更快的扫描 - 集成 Nmap,以便对发现的端口进行更深入的后续扫描 - 基于 Web 的结果仪表板 ## 许可证 MIT
标签:Python, 域名侦查, 插件系统, 数据统计, 无后门, 端口扫描, 逆向工具