mayankpathania0/Port-Scanner

GitHub: mayankpathania0/Port-Scanner

一款基于 Python 多线程的零依赖 TCP 端口扫描器,可在数秒内完成上千端口的扫描并提供服务指纹识别。

Stars: 0 | Forks: 1

Python License Platform Status Zero Dependencies

# 🔍 FastTCP 端口扫描器 ## 🖥️ 在线演示(查看实际运行效果)** 在你自己的机器上**不到 5 秒**即可运行: ``` $ python3 port_scanner.py scanme.nmap.org -p 22,80,443 --banners [*] Starting scan on target: scanme.nmap.org [*] Scanning 3 ports using multi-threading (50 workers)... -------------------------------------------------- [+] Port 22 is OPEN └─ Service info: SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.13 [+] Port 80 is OPEN └─ Service info: HTTP/1.1 200 OK Server: nginx/1.10.3 [+] Port 443 is OPEN └─ Service info: HTTP/1.1 400 Bad Request Server: nginx/1.10.3 -------------------------------------------------- [✅] Scan Complete! Found 3 open ports: [22, 80, 443] ================================================== ``` ## 📌 问题与解决方案 **问题:** 安全分析师和渗透测试人员需要快速映射攻击面。**按顺序**扫描 65,535 个端口是不切实际的——这需要 **30 多分钟**并会使工作停滞。 **解决方案:** **FastTCP 端口扫描器**利用 Python 的并发性同时扫描 **50 个端口**。它将耗时 30 分钟的任务缩短至**不到 5 秒**,同时保持准确性,并增加了用于漏洞识别的智能 banner grabbing 功能。 ## ✨ 主要功能 | 🚀 **性能** | 🧩 **灵活性** | 🏷️ **智能性** | 🛡️ **可靠性** | | :--- | :--- | :--- | :--- | | 50 线程并发扫描 | 扫描 `common` 端口、自定义 `ranges` 或特定 `lists` | 提取服务版本(Apache、OpenSSH、Nginx) | 0.5 秒超时以处理受防火墙保护的主机 | | 将扫描时间缩短 **~99%** | 零硬编码限制 | 识别过时、易受攻击的软件 | 优雅的错误处理,不会崩溃 | | 使用 `ThreadPoolExecutor` | 接受 IP 和主机名 | 特定协议探测(HTTP、通用) | **零外部依赖** | ## ⚡ 性能基准测试 以下是在标准家庭网络上的实际速度对比(扫描 1,000 个端口): | 方法 | 耗时 | Worker 数 | | :--- | :--- | :--- | | **顺序扫描**(一次扫描 1 个端口) | ~8 分 20 秒 | 1 | | **FastTCP 扫描器**(多线程) | **~4.5 秒** | 50 | | **速度提升** | **快 99.1%** | — | *此基准测试证明,并发是构建现实世界安全工具的关键。* ## 🛠️ 底层技术 | 组件 | 技术 | 选择原因 | | :--- | :--- | :--- | | **语言** | Python 3.7+ | 开发迅速,标准库庞大。 | | **网络** | `socket`(标准库) | 底层 TCP 控制;精确的握手模拟。 | | **并发** | `ThreadPoolExecutor` | 安全地管理线程池;避免竞态条件。 | | **CLI 解析** | `argparse`(标准库) | 专业的标志解析;零第三方冗余。 | ## ⚙️ 安装(零步骤!) 因为该工具**仅使用 Python 的标准库**,所以完全不需要安装任何东西。 ``` # 1. Clone the repository git clone https://github.com/your-username/fast-tcp-scanner.git cd fast-tcp-scanner # 2. 立即运行 python3 port_scanner.py 127.0.0.1 -p common ``` ## 🎮 命令参考(完整语法) ### 基础语法 ``` python3 port_scanner.py [OPTIONS] ``` ### 完整选项表 | 标志 | 类型 | 接受的值 | 默认值 | 描述 | | :--- | :--- | :--- | :--- | :--- | | `target` | **参数** | IP(例如 `192.168.1.1`)或主机名(`example.com`) | **必填** | 你要扫描的系统。 | | `-p, --ports` | 可选 | `common`
`1-1000`
`22,80,443` | `common` | 定义范围。`common` = 前 22 个高风险端口。 | | `--banners` | 标志 | 无 | `False` | 切换服务指纹识别。显示确切的软件版本。 | | `-h, --help` | 标志 | 无 | 无 | 显示包含所有选项的帮助菜单。 | ## 🧪 使用场景(实际应用) 以下是安全专业人员在不同环境中使用此工具的方式: ### 场景 1:CTF / 渗透测试 *快速查找目标机器上的易受攻击服务。* ``` python3 port_scanner.py 10.10.10.50 -p common --banners ``` ### 场景 2:内部网络审计 *映射公司服务器上的所有开放端口以确保合规。* ``` python3 port_scanner.py 192.168.10.5 -p 1-5000 ``` ### 场景 3:快速外部侦察 *检查关键 Web 端口是否暴露在互联网上。* ``` python3 port_scanner.py example.com -p 80,443,8443 --banners ``` ### 场景 4:本地主机安全基线 *确保你自己的机器没有意外暴露敏感端口。* ``` python3 port_scanner.py 127.0.0.1 -p 1-1024 ``` **逐步分解:** 1. **Worker(`scan_single_port`):** 创建一个 TCP socket 并尝试使用 `connect_ex()` 进行连接。如果端口开放则返回 `0`;否则静默失败。 2. **管理器(`scan_ports`):** 使用 `ThreadPoolExecutor` 将所有连接尝试分派给 50 个并发线程。使用 `as_completed()` 在结果完成时进行处理。 3. **指纹识别器(`grab_banner`):** 对于 Web 端口(80、443),它会发送一个 `HTTP HEAD` 请求。 对于其他端口,它会发送一个通用的换行符。 读取响应以提取服务器名称和版本。 ## 📋 错误处理与故障排除 | 错误 / 行为 | 原因 | 解决方案 | | :--- | :--- | :--- | | `[!] Error: Invalid hostname` | 目标无法通过 DNS 解析。 | 检查拼写。先使用 `ping `。 | | 脚本在单个端口上挂起 | 防火墙正在静默丢弃数据包(Filtered)。 | 按 `Ctrl+C`。减少扫描范围或增加超时时间。 | | `[No banner received]` | 服务在显示 banner 前需要身份验证(例如 MySQL)。 | 这是正常的。端口仍然是开放的;只是不够详细。 | | macOS/Linux 上出现 `Permission denied` | 某些系统限制了对 1024 以下端口的原始 socket 访问。 | 此扫描器使用 TCP Connect,在 macOS 上通常不需要 `sudo`。如果发生这种情况,请尝试 `sudo python3`。 | ## 🗺️ 未来路线图 - [ ] **UDP 扫描** – 增加对 DNS、SNMP 和 NTP 端口发现的支持。 - [ ] **多目标文件输入** – 从 `.txt` 文件扫描整个子网。 - [ ] **导出为 JSON/CSV** – 生成报告以供专业文档记录。 - [ ] **Asyncio 引擎** – 从线程迁移到 async 以进一步降低开销。 ## ⚠️ 法律与道德免责声明 ## 📜 许可证 在 MIT 许可证下分发。有关更多信息,请参阅 `LICENSE`。

由 Mayank Pathania 用 🔥 构建

标签:Banner抓取, Python, 并发扫描, 插件系统, 数据统计, 无后门, 端口扫描, 逆向工具