Derek-Wegerbauer/simple-port-scanner
GitHub: Derek-Wegerbauer/simple-port-scanner
一个仅使用 Python 标准库的轻量级 TCP 端口扫描器,面向教育和授权测试场景,帮助初学者学习网络扫描原理与道德安全测试实践。
Stars: 0 | Forks: 1
# 简易端口扫描器
一个用于教育和授权网络测试的 Python TCP connect 扫描器。
## 概述
本项目是一个用 Python 编写的命令行 TCP 端口扫描器。它会扫描单个目标(例如 IPv4 地址或主机名),并检查选定的 TCP 端口是开放的还是已关闭/被过滤的。
该扫描器是作为一个学习项目创建的,旨在练习 Python 脚本编写、网络基础知识、命令行工具开发以及道德安全测试。
`docs/` 文件夹中提供了完整的项目说明,包含测试记录、设计决策、截图和未来改进计划。
## 功能
- 扫描目标主机名或 IPv4 地址
- 扫描内置的常用端口列表
- 扫描用户指定的端口范围
- 配置 socket 超时值
- 显示所有结果或仅显示开放的端口
- 基本的输入验证和错误处理
- 清晰的命令行输出
## 展示的技能
- Python 脚本编写
- Socket 编程
- 使用 `argparse` 进行命令行参数解析
- TCP 网络基础知识
- 错误处理和验证
- 道德测试边界
- 项目文档编写
## 用法
在项目根目录下运行扫描器:
```
python src/port_scanner.py TARGET --common
```
使用常用端口列表的示例:
```
python src/port_scanner.py 127.0.0.1 --common
```
使用端口范围的示例:
```
python src/port_scanner.py 127.0.0.1 --ports 20-100
```
仅显示开放端口的示例:
```
python src/port_scanner.py 127.0.0.1 --common --open-only
```
使用自定义超时的示例:
```
python src/port_scanner.py 127.0.0.1 --ports 1-1024 --timeout 1
```
## 示例输出
```
Scan Target: 127.0.0.1 (127.0.0.1)
Ports: common list
Timeout: 0.5 seconds
Display mode: all ports
Notice: Only scan systems you own or have permission to test.
Port 20: Closed/Filtered
Port 21: Closed/Filtered
Port 22: Open
Port 23: Closed/Filtered
Scan completed in 0.12 seconds
```
## 截图
`screenshots/` 文件夹中提供了从受控实验室测试中选取的截图。
示例包括:
- Localhost 仅开放端口扫描
- 无效端口范围验证
- 远程 Windows HTTP 服务检测
- Raspberry Pi SSH 检测
## 项目结构
```
simple-port-scanner/
├── README.md
├── requirements.txt
├── .gitignore
├── src/
│ └── port_scanner.py
├── docs/
│ └── project-writeup.md
└── screenshots/
```
## 环境要求
本项目仅使用 Python 标准库。
不需要任何外部 Python 包。
## 道德声明
本工具仅供教育和授权测试使用。请仅扫描您拥有或获得明确测试许可的系统。
## 局限性
- 仅支持 IPv4
- 仅支持 TCP connect 扫描
- 不执行服务检测
- 不执行 banner grabbing
- 不直接识别防火墙规则
- 当端口被阻止、过滤、超时或关闭时,结果可能会显示为 `Closed/Filtered`
## 未来改进
- 添加 IPv6 支持
- 添加 banner grabbing
- 添加 CSV 或 JSON 输出
- 添加日志记录到文件的功能
- 添加单元测试
- 添加多线程以实现更快的扫描
- 添加更详细的文档和截图
## 作者
Derek Wegerbauer
标签:Python, Socket编程, 安全测试, 插件系统, 攻击性安全, 数据统计, 无后门, 端口扫描, 网络工具, 逆向工具