StevenRyckeley/Port-Scanner
GitHub: StevenRyckeley/Port-Scanner
一个用于教育目的的轻量级Python TCP端口扫描器,可快速识别目标主机上11个常见服务端口的开放状态。
Stars: 0 | Forks: 0
# 端口扫描器
一个轻量级的 Python TCP 端口扫描器,用于识别目标主机上的开放服务。构建为网络安全作品集的一部分,旨在演示网络基础、Socket 编程和侦察概念。
## 功能
- 扫描 11 个常见的知名端口(IANA 定义的范围 0–1023)
- 识别关联的服务名称(SSH、HTTP、RDP 等)
- 接受通过命令行参数指定的可选目标主机
- 显示清晰的开放/关闭摘要及最终计数
- 无外部依赖 —— 仅使用标准库
## 扫描端口
| 端口 | 服务 | 说明 |
|------|---------|-------|
| 21 | FTP | 未加密的文件传输 |
| 22 | SSH | 加密的远程登录 |
| 23 | Telnet | 传统的未加密远程登录 |
| 25 | SMTP | 发送邮件 |
| 53 | DNS | 主机名解析 |
| 80 | HTTP | 未加密的 Web 流量 |
| 110 | POP3 | 接收邮件检索 |
| 143 | IMAP | 邮件管理 |
| 443 | HTTPS | 加密的 Web 流量 (TLS) |
| 445 | SMB | Windows 文件/打印机共享 |
| 3389 | RDP | Windows 远程桌面 |
## 使用方法
```
# 扫描 localhost(默认)
python port_scanner.py
# 扫描特定主机
python port_scanner.py 192.168.1.1
python port_scanner.py example.com
```
### 示例输出
```
Scanning target: localhost
----------------------------------------
[OPEN] Port 22 (SSH)
[CLOSED] Port 80 (HTTP)
[OPEN] Port 443 (HTTPS)
...
----------------------------------------
Scan complete: 2/11 ports open on localhost
```
## 工作原理
扫描器使用 Python 内置的 `socket` 模块,通过 `connect_ex()` 尝试在每个端口上建立 **TCP 连接** (`SOCK_STREAM`)。与 `connect()` 不同,`connect_ex()` 返回错误代码而不是抛出异常 —— `0` 表示端口接受了连接(开放),任何非零值表示连接被拒绝或超时(关闭/被过滤)。
1 秒的超时时间可防止扫描器在静默丢弃数据包的防火墙端口上停滞。
## 演示概念
- **TCP/IP 基础** — 理解面向连接与无连接协议的区别
- **Socket 编程** — 使用 `AF_INET` / `SOCK_STREAM` 进行 IPv4 TCP Socket 操作
- **网络侦察** — 端口扫描作为枚举的第一阶段
- **资源管理** — 显式关闭 Socket 以释放 OS 文件描述符
- **IANA 知名端口** — 了解标准化的服务到端口映射
## 免责声明
此工具仅用于**教育和授权测试目的**。在扫描任何你不拥有的主机之前,请务必获得明确的许可。未经授权的端口扫描可能违反当地法律和网络策略。
## 未来改进
- [ ] 多线程以加快大范围端口的扫描速度
- [ ] 使用 `-p` 标志支持全端口范围扫描 (1–65535)
- [ ] UDP 端口扫描支持
- [ ] 将结果导出为 CSV 或 JSON
- [ ] Banner 抓取以指纹识别服务版本
- [ ] 与 MITRE ATT&CK 集成 —— 将开放端口映射到相关技术(例如,T1046 网络服务发现)
标签:Python, Qt框架, RDP, SMB, SSH, TCP连接, 协议分析, 套接字编程, 密码管理, 插件系统, 数据统计, 无后门, 服务识别, 权限提升, 标准库, 漏洞扫描辅助, 端口扫描, 网络安全, 网络工具, 逆向工具, 错误配置检测, 隐私保护