Cwubs28/Port-Scanner-

GitHub: Cwubs28/Port-Scanner

一个基于 Python 的多线程 TCP 端口扫描命令行工具,支持自定义端口范围并附带 Banner 抓取功能,帮助用户快速发现目标主机的开放端口及运行服务。

Stars: 0 | Forks: 0

# Python 端口扫描器 一个多线程 Python 命令行工具,可扫描目标主机的开放 TCP 端口,并识别每个端口上运行的服务。 ## 为什么开发这个工具 这是我 [failed-login-detector](https://github.com/Cwubs28/failed-login-detector) 项目的自然延伸。 那个工具用于在攻击发生后分析日志。 而这个工具旨在回答一个问题:“系统上最初到底暴露了什么?” 端口扫描是真正的渗透测试和攻击者进行侦察的第一步, 因此,从根本上理解它的工作原理(而不是仅仅运行 Nmap)是我的目标。 ## 法律声明 仅扫描您拥有或获得明确书面许可进行扫描的主机。 未经许可扫描您无法控制的系统在大多数 地方都是非法的(在美国,这可能属于《计算机欺诈和滥用法案》范畴)。 此脚本默认针对 `127.0.0.1`(您自己的机器)进行安全的本地测试。 ## 功能 - 扫描目标 IP/主机名,支持自定义端口范围或列表 - 采用多线程技术,大型端口范围可在几秒钟内完成扫描,而不是几分钟 - 根据端口号识别常见服务(SSH、HTTP、FTP、RDP 等) - 在可用时抓取服务 banner 以获取额外细节(例如,识别开放端口上运行的确切软件/版本) - 将清晰的报告输出到屏幕或文件 ## 如何运行 ``` # 扫描本机默认范围 (1-1024) python3 port_scanner.py 127.0.0.1 # 扫描特定范围 python3 port_scanner.py 127.0.0.1 --ports 1-1000 # 扫描特定 ports python3 port_scanner.py 127.0.0.1 --ports 22,80,443,3389 # 混合 ranges 和特定 ports python3 port_scanner.py 127.0.0.1 --ports 1-100,443,8080 # 控制 thread 数量(越高 = 越快,但也更具侵略性) python3 port_scanner.py 127.0.0.1 --ports 1-1000 --threads 200 # 将报告保存到文件 python3 port_scanner.py 127.0.0.1 --ports 1-1000 --output report.txt ``` ## 示例输出 针对 localhost 运行,扫描端口 1-1024: ``` OPEN PORTS FOUND: 2 [OPEN] Port 135 unknown [OPEN] Port 445 SMB ``` 请参阅附带的截图以获取完整的扫描输出。 ![端口扫描输出](https://static.pigsec.cn/wp-content/uploads/repos/cas/28/284e9c90cb06360b692cde28a47e28ece8751e832f016d45a6084a2be4532e37.png) ## 工作原理 1. **连接尝试** — 对于每个端口,脚本会尝试使用 Python 的 `socket` 库建立真实的 TCP 连接。成功的连接意味着该端口上有程序正在监听。 2. **多线程** — 扫描在从共享队列中提取任务的多个线程中同时进行,因此可以并行检查数百个端口,而不是每次只检查一个(如果按顺序执行包含 1 秒超时的 1000 端口扫描,可能需要大约 17 分钟;而使用多线程只需几秒钟)。 3. **Banner 抓取** — 一旦确认某个端口开放,脚本就会尝试读取服务首先返回的任何数据,这通常会揭示该端口上运行的确切软件和版本。 ## 展现的技能 - Socket 编程(网络层面的 TCP 连接) - 命令行工具设计 - 核心安全概念:侦察 / 攻击面发现 - 关于扫描工具的负责任使用声明与法律意识 ## 可能的后续步骤 - 添加 UDP 扫描(此版本仅涵盖 TCP) - 将结果导出为 JSON 格式,以便输入到其他工具 - 将发现的开放端口输入到 failed-login-detector 中,构建一个从侦察到检测的组合流水线
标签:Python, 插件系统, 数据统计, 无后门, 服务器安全, 端口扫描, 网络安全, 逆向工具, 隐私保护