Oliver-Sec/Stealth-Scanner

GitHub: Oliver-Sec/Stealth-Scanner

一款Python编写的多线程端口扫描器,支持服务识别、横幅抓取和操作系统指纹识别,用于网络安全侦察和渗透测试的初期枚举阶段。

Stars: 1 | Forks: 0

# 🔍 Stealth 端口扫描器 v1.0 ### 一款专业的网络安全侦察工具 ## 📖 这个项目是什么? **Stealth 端口扫描器** 是一款命令行网络侦察工具,能够探测目标机器或网络范围,并报告哪些端口是开放的、正在运行哪些服务以及它们暴露的版本信息。它作为一个作品集项目被开发出来,旨在展示专业渗透测试人员如何执行评估的最早期阶段 —— **侦察与枚举**。 它具备五个核心功能: 1. **并行扫描端口** —— 使用多线程同时测试数百个端口,使其比标准的线性扫描快得多。 2. **识别服务** —— 无需连接互联网,即可将开放端口映射到 50 多个已知服务名称(HTTP、SSH、RDP、SMB、MySQL 等)。 3. **抓取横幅** —— 连接到每个开放端口并读取初始响应,通常会显示软件名称和版本(例如 `OpenSSH_8.9`、`nginx/1.24.0`)。 4. **操作系统指纹识别** —— 分析收集到的横幅信息,从而推断目标运行的是 Windows 还是 Linux。 5. **保存带有时间戳的报告** —— 自动将完整的 `.txt` 日志写入到 `reports/` 文件夹中,以供后续查看。 ## 🚀 如何运行 ### 第 1 步 — 安装 Python 确保您已安装 Python 3.8 或更高版本。从 [python.org](https://www.python.org/downloads/) 下载。 ### 第 2 步 — 安装所需的库 打开您的终端(PowerShell 或命令提示符)并运行: ``` pip install -r requirements.txt ``` 或者直接安装: ``` pip install colorama ``` ### 第 3 步 — 运行扫描器 **选项 A — 双击运行(适合初学者):** 只需在文件资源管理器中双击 `scanner.py`。该工具将启动并以交互方式询问您的目标和设置 —— 无需命令行知识。 **选项 B — 从终端运行(推荐):** ``` python scanner.py 192.168.1.1 ``` 系统会自动创建一个 `reports/` 文件夹,并将完整的扫描日志保存在其中。 ## ⚙️ 命令行选项 | 标志 | 描述 | 默认值 | |---|---|---| | `TARGET` | IP 地址、主机名或 CIDR 范围 | *(必填)* | | `-ps` / `--port-start` | 要扫描的起始端口 | `1` | | `-pe` / `--port-end` | 要扫描的结束端口 | `1024` | | `-t` / `--threads` | 并行线程数 | `200` | | `--timeout` | 每次连接尝试的超时秒数 | `1.0` | | `-d` / `--delay` | 探测之间的隐蔽延迟(以秒为单位) | `0.0` | | `--no-banners` | 跳过横幅抓取(更快、更安静) | 关 | | `--no-log` | 不保存报告文件 | 关 | **示例:** ``` # 扫描路由器的顶部 1024 个端口 python scanner.py 192.168.1.1 # 使用 300 个线程全量扫描所有 65535 个端口 python scanner.py 10.0.0.1 -ps 1 -pe 65535 -t 300 # 使用 500ms 延迟和 2s 超时进行 Stealth 扫描 python scanner.py 10.10.10.5 -d 0.5 --timeout 2.0 # 扫描整个子网 (CIDR 表示法) python scanner.py 192.168.1.0/24 -ps 1 -pe 1024 # 扫描官方合法测试目标 (无需安装) python scanner.py scanme.nmap.org ``` ## 🧠 初学者指南:多线程如何提升速度 这是整个脚本中最重要的概念。以下是用通俗易懂的语言对其工作原理的解释。 ### 邮局类比 想象一下,您需要检查 1,024 个邮箱是空的还是满的。慢的方法是打开 1 号邮箱,看看里面,关上它,然后再移到 2 号邮箱,依此类推 —— 一次检查一个。那会花费很长时间。 快的方法是雇佣 **200 个人**,然后把他们同时派出去。每个人同时检查一个不同的邮箱,然后他们同时向您汇报结果。 **`concurrent.futures.ThreadPoolExecutor`** 就是雇佣这 200 名工人(线程)的经理。每个工人被分配去测试一个端口。他们同时运行,一旦其中一人发现开放的端口,就会立即将结果回传 —— 您不必等待所有人完成。 ### 代码逐行解释 ``` with concurrent.futures.ThreadPoolExecutor(max_workers=args.threads) as executor: ``` - 这创建了一个**工作线程池**。`max_workers=200` 意味着最多可以同时运行 200 个端口检查。 ``` future_map = { executor.submit(scan_port, target_ip, port, ...): port for port in ports } ``` - `executor.submit()` 将一个任务发送到线程池。它返回一个 **Future** —— 一个代表“未来某个时刻将会存在的结果”的对象。 - 我们将每个 Future 存储在一个字典中,以便我们可以将其与相应的端口号匹配回来。 ``` for future in concurrent.futures.as_completed(future_map): result = future.result() ``` - `as_completed()` 是一个生成器,它会在**每个线程完成后立即**生成相应的 Future —— 不是按照它们提交的顺序,而是按照它们完成的顺序。这意味着几乎可以瞬间在屏幕上看到开放的端口,即使其他数百个检查仍在运行中。 ## 🔍 渗透测试人员在真实评估中如何使用此工具 ### 什么是侦察? 在专业的渗透测试中,最初的阶段被称为**侦察**(也称为**枚举**)。在渗透测试人员尝试利用任何东西之前,他们需要构建目标的整体轮廓: - 网络上有哪些机器? - 每台机器上开放了哪些端口? - 正在运行什么软件,以及是什么版本? 端口扫描器是回答这些问题的基本工具。这相当于窃贼在检查房屋的每扇窗户和门 —— 在撬锁之前,您需要知道存在哪些入口点。 ### 渗透测试人员的工作流程 ``` PHASE 1 — Run the Port Scanner | v PHASE 2 — Review the Open Ports | --> Is there an RDP port (3389) open? --> Potential brute-force target. --> Is there an SMB port (445) open? --> Check for EternalBlue / MS17-010. --> Is there an old SSH version? --> Check CVE database for vulnerabilities. --> Is there an unknown port open? --> Investigate with Netcat or Wireshark. | v PHASE 3 — Analyse the Banners | --> Does the banner reveal a specific version? --> Search that version on exploit-db.com or the NVD. | v PHASE 4 — OS Fingerprint | --> Knowing the OS narrows down which exploits, payloads, and privilege escalation techniques might apply. ``` ### 真实世界的示例 假设扫描器产生以下输出: ``` +== Scanning: 10.10.10.40 ================== | [OPEN] 22 | SSH | -> OpenSSH 7.2p2 Ubuntu | [OPEN] 80 | HTTP | -> Apache httpd 2.4.18 | [OPEN] 3389 | RDP +==================================================== | Open Ports : 3 | OS Guess : Linux (Confidence: High) ``` 渗透测试人员会立即注意到: - **`OpenSSH 7.2p2`** —— 这个确切的版本存在公开记录的**用户枚举漏洞** (CVE-2016-6210)。值得深入调查。 - **`Apache 2.4.18`** —— 一个包含多个已知 CVE 的非常旧的版本。测试人员会在 `exploit-db.com` 上检查可用的漏洞利用程序。 - **Linux 机器上的 3389 端口 (RDP)** —— 很不寻常。这可能是 `xrdp` 并可能表明存在配置错误。 这正是真实评估开始的方式。 ## 🛡️ 什么是横幅抓取? 当您连接到大多数网络服务时,它们会立即向您发送一条介绍性消息。这被称为**横幅**。它通常包含服务名称、版本号,有时还包含操作系统。 想象一下,这就像拨打公司的电话线路并听到: 您并没有主动索要这些信息 —— 是他们主动告诉您的。网络服务也是如此。 **为什么这对安全很重要?** 如果某个服务宣布它正在运行某个软件的 `2.3` 版本,攻击者就可以在 [CVE 数据库](https://nvd.nist.gov/) 中查找该确切版本,并立即找到针对它的所有已知漏洞。这就是为什么具有安全意识的管理员会将其服务器配置为**隐藏或伪造横幅** —— 这是一种被称为“隐蔽式安全”的技术。 ## 📁 输出文件 | 文件 | 描述 | |---|---| | `scanner.py` | 主脚本 —— 所有逻辑都在这里 | | `requirements.txt` | 您需要安装的唯一库 | | `reports/` | 自动创建的文件夹,用于保存扫描日志 | | `reports/scan__.txt` | 每次扫描运行的完整报告 | ## 📜 MIT 许可证 ``` MIT License Copyright (c) 2025 Oliver-Sec Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` ## ⚠️ 法律与道德声明 ### 合法的测试目标(随时可安全使用) | 目标 | 备注 | |---|---| | `scanme.nmap.org` | 由 Nmap 项目官方提供,专为此目的服务 | | `127.0.0.1` | 您自己的本地机器 | | 您的家庭路由器 | 通常是 `192.168.1.1` 或 `192.168.0.1` | | 您控制的虚拟机 | 最佳实践 —— 建立一个实验环境 | ## 🛠️ 使用的技术 | 库 / 模块 | 为什么使用它 | |---|---| | `socket` | Python 内置;用于建立到每个端口的 TCP 连接 | | `concurrent.futures` | Python 内置;提供多线程线程池 | | `ipaddress` | Python 内置;用于解析和扩展 CIDR 表示法 | | `argparse` | Python 内置;处理命令行参数解析 | | `colorama` | 第三方库;在 Windows 上启用彩色终端输出 | | `datetime` | Python 内置;用于为报告和文件名添加时间戳 | | `random` | Python 内置;用于为隐蔽延迟增加抖动 | ## 💡 扩展此项目的建议 一旦您熟悉了这个脚本,这里有一些提升它的方法: - [ ] **添加 UDP 扫描** —— TCP 扫描只能发现 TCP 服务。许多重要的服务(DNS、SNMP、DHCP)使用的是 UDP。 - [ ] **VirusTotal / AbuseIPDB 集成** —— 通过它们的免费 API 自动根据威胁情报数据库检查发现的 IP。 - [ ] **HTML 报告输出** —— 生成带有颜色编码结果且可在浏览器中查看的报告,而不是纯文本文件。 - [ ] **先进行 Ping 扫描** —— 在扫描端口之前,对 CIDR 范围执行 ICMP Ping 扫描,以识别哪些主机实际在线。 - [ ] **自定义服务文件** —— 从外部 `.json` 文件加载服务映射,以便用户可以添加自己的端口到服务映射。 - [ ] **CVE 查询** —— 解析横幅,提取版本字符串,并自动查询 NVD API 以获取已知漏洞。 - [ ] **Nmap XML 导出** —— 以兼容 Nmap 的 XML 格式输出结果,以便与 Metasploit 等工具配合使用。 ## 📚 进阶学习 - [TryHackMe](https://tryhackme.com) —— 免费、对初学者友好的网络安全实验室,提供引导式学习路径 - [Hack The Box](https://www.hackthebox.com) —— 中级/高级练习靶机 - [Nmap 文档](https://nmap.org/docs.html) —— 端口扫描的专业标准 - [CVE 数据库 (NVD)](https://nvd.nist.gov/) —— 按软件版本查找已知漏洞 - [Exploit-DB](https://www.exploit-db.com/) —— 已知漏洞利用程序的公共数据库 - [OWASP Top 10](https://owasp.org/www-project-top-ten/) —— 最常见的 Web 应用程序安全风险 *祝您(符合道德地)黑客技术学习愉快! 🚀*
标签:AES-256, Banner Grabbing, Python, Python安全编程, Qt框架, Windows内核, 云存储安全, 安全运营中心, 开源安全工具, 插件系统, 操作系统指纹识别, 数据展示, 数据统计, 无后门, 无线安全, 服务识别, 漏洞评估, 白帽子, 端口扫描, 端口枚举, 红队, 网络安全, 网络扫描, 网络映射, 逆向工具, 逆向工程平台, 隐私保护, 隐秘扫描