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
```
请参阅附带的截图以获取完整的扫描输出。

## 工作原理
1. **连接尝试** — 对于每个端口,脚本会尝试使用 Python 的 `socket` 库建立真实的 TCP 连接。成功的连接意味着该端口上有程序正在监听。
2. **多线程** — 扫描在从共享队列中提取任务的多个线程中同时进行,因此可以并行检查数百个端口,而不是每次只检查一个(如果按顺序执行包含 1 秒超时的 1000 端口扫描,可能需要大约 17 分钟;而使用多线程只需几秒钟)。
3. **Banner 抓取** — 一旦确认某个端口开放,脚本就会尝试读取服务首先返回的任何数据,这通常会揭示该端口上运行的确切软件和版本。
## 展现的技能
- Socket 编程(网络层面的 TCP 连接)
- 命令行工具设计
- 核心安全概念:侦察 / 攻击面发现
- 关于扫描工具的负责任使用声明与法律意识
## 可能的后续步骤
- 添加 UDP 扫描(此版本仅涵盖 TCP)
- 将结果导出为 JSON 格式,以便输入到其他工具
- 将发现的开放端口输入到 failed-login-detector 中,构建一个从侦察到检测的组合流水线
标签:Python, 插件系统, 数据统计, 无后门, 服务器安全, 端口扫描, 网络安全, 逆向工具, 隐私保护