ankurdas-cyberphantom/python-port-scanner

GitHub: ankurdas-cyberphantom/python-port-scanner

一个基于 Python 的多线程端口扫描器,提供横幅抓取、服务检测与 CSV 导出,适用于安全教学与授权测试。

Stars: 1 | Forks: 0

# 🔍 高级端口扫描器 一个多线程 Python 端口扫描器,支持横幅抓取、服务检测、带颜色的输出和可选的 CSV 导出。适用于教育用途和授权渗透测试。 ## ⚠️ 免责声明 ## 📋 功能特性 - ⚡ 通过 `ThreadPoolExecutor` 实现多线程扫描 - 🎯 在开放端口上抓取横幅 - 🔎 服务检测(内置映射 + `socket.getservbyport` 回退) - 🌈 彩色终端输出(通过 `colorama`) - 📊 清晰的摘要表格(通过 `tabulate`) - 💾 带表头的 CSV 导出 - 🖥️ 主机名解析(IP ↔ 主机名) - 📈 扫描期间的实时进度条 ## 🛠️ 环境要求 **Python 3.6+** 安装依赖: ``` pip install -r requirements.txt ``` 或手动安装: ``` pip install colorama tabulate ``` | 包名 | 用途 | 是否必需 | |---|---|---| | `colorama` | 彩色终端输出 | 可选 | | `tabulate` | 格式化摘要表格 | 可选 | ## 🚀 使用方法 ### 交互模式(推荐初学者使用) ``` python advanced_port_scanner.py ``` 系统会提示你输入: ``` Enter target IP (default 127.0.0.1): 192.168.1.1 Enter port range (e.g. 1-1000): 1-1000 Max threads (default 100): 100 Save to file? (leave blank to skip): results.csv ``` ### CLI / Argparse 模式 ``` python advanced_port_scanner.py -t -p - [--threads N] [-o output.csv] ``` **参数说明:** | 标志 | 长形式 | 描述 | 默认值 | 是否必需 | |---|---|---|---|---| | `-t` | `--target` | 目标 IP 地址或主机名 | `127.0.0.1` | 否 | | `-p` | `--ports` | 端口范围(`起始-结束` 格式) | — | **是** | | `--threads` | `--threads` | 最大并发线程数 | `100` | 否 | | `-o` | `--output` | 将结果保存为 `.csv` 文件 | — | 否 | **示例:** ``` # 扫描本地主机端口 1–1000 python advanced_port_scanner.py -p 1-1000 # 使用自定义线程数扫描特定 IP python advanced_port_scanner.py -t 192.168.1.1 -p 1-65535 --threads 200 # 扫描并保存结果到文件 python advanced_port_scanner.py -t 10.0.0.5 -p 20-445 -o results.csv # 使用主机名扫描 python advanced_port_scanner.py -t scanme.nmap.org -p 1-100 ``` ## 📤 输出内容 ### 扫描过程中的终端输出 ``` === Advanced Python Port Scanner === Target : 127.0.0.1 (localhost) Range : 1 - 1000 (1000 ports) Threads : 100 Started : 2025-01-15 22:34:01 [OPEN] Port 22 | Service: SSH | Banner: OpenSSH_9.0 [OPEN] Port 80 | Service: HTTP | Banner: No banner [OPEN] Port 443 | Service: HTTPS | Banner: No banner ``` ### 扫描完成后的摘要表格 ``` --- Scan Summary --- Port Service Banner ------ --------- ---------------- 22 SSH OpenSSH_9.0 80 HTTP No banner 443 HTTPS No banner 3 open port(s) found. Time taken: 0:00:04.213 ``` ### 使用 `-o` 参数时的 CSV 输出 ``` port,service,banner 22,SSH,OpenSSH_9.0 80,HTTP,No banner 443,HTTPS,No banner ``` ## 🗂️ 内置服务映射 扫描器默认识别以下常用端口。未知端口将回退到 `socket.getservbyport`。 | 端口 | 服务 | |---|---| | 21 | FTP | | 22 | SSH | | 23 | Telnet | | 25 | SMTP | | 53 | DNS | | 80 | HTTP | | 110 | POP3 | | 135 | RPC | | 139 | NetBIOS | | 143 | IMAP | | 443 | HTTPS | | 445 | SMB | | 3306 | MySQL | | 3389 | RDP | | 5432 | PostgreSQL | | 6379 | Redis | | 8080 | HTTP-Alt | | 8443 | HTTPS-Alt | | 27017 | MongoDB | ## 📁 项目结构 ``` python-port-scanner/ │ ├── advanced_port_scanner.py # Advanced multithreaded scanner ├── port_scanner.py # Original basic scanner ├── requirements.txt # Python dependencies └── README.md # This file ``` ## 🧠 工作原理 1. **解析** 目标主机名为 IP 地址(如果可能,进行反向解析) 2. **创建** 带有 `ThreadPoolExecutor` 的线程池 —— 避免无限制线程导致的操作系统级线程耗尽 3. **每个线程** 对分配的端口尝试 TCP `connect_ex()` 4. **成功时** —— 获取服务名称并发送 `Hello\r\n` 探针以捕获横幅 5. **进度条** 在终端中实时更新扫描进度 6. **结果** 通过 `Lock` 线程安全地收集,按端口排序,并以摘要表格形式打印 ## 👤 作者 **CyberPhantom** — MCA 学生 | 网络安全爱好者 | 漏洞赏金猎人 - HackerOne / Intigriti: `inti_youknowwhoiam_` - HTB: Active VIP Member ## 📜 许可证 本项目采用 MIT 许可证授权 —— 详见 [LICENSE](LICENSE)。
标签:Argparse, Banner抓取, Colorama, IP解析, Linux工具, Python, Qt框架, Socket编程, Tabulate, ThreadPoolExecutor, 主机名解析, 二进制发布, 云存储安全, 交互模式, 开源工具, 彩色输出, 情报分析, 教育用途, 数据统计, 无后门, 服务识别, 端口扫描, 端口探测, 终端美化, 网络扫描, 网络诊断, 表格输出, 进度条, 逆向工具