MoussHack-LeCrack/simple-port-scanner
GitHub: MoussHack-LeCrack/simple-port-scanner
一个用纯 Python 标准库编写的轻量级 TCP 端口扫描器,专注于代码可读性和学习价值,支持端口扫描、服务识别和 banner 抓取。
Stars: 0 | Forks: 0
# simple-port-scanner

一个用 Python 编写的小型 TCP 端口扫描器。
其目标是作为一个简单的项目,代码可读性强且易于修改,用于学习 sockets、`argparse` 以及 JSON 输出的基础知识。
## 功能特性
- 扫描单个目标
- 列表形式的端口:`22,80,443`
- 范围形式的端口:`1-1024`
- 显示开放的端口
- verbose 选项,同时显示关闭的端口
- 使用字典进行简单的服务检测
- 简单的 banner 抓取尝试
- 支持 JSON 输出
- 无任何外部依赖
## 警告
此脚本只能在您的个人机器、实验环境中使用,或者在获得明确授权的情况下使用。
请勿扫描不属于您的机器。
## 结构
```
simple-port-scanner/
├── README.md
├── .gitignore
├── LICENSE
└── scanner.py
```
## 安装
只需要 Python 3.11 或更高版本。
```
cd simple-port-scanner
```
无需安装任何库。
## 使用方法
```
python scanner.py --target scanme.nmap.org --ports 22,80,443
```
选项:
- `--target`:要扫描的目标
- `--ports`:要扫描的端口
- `--timeout`:超时时间(秒)
- `--json`:JSON 输出
- `--verbose`:同时显示关闭的端口
## 示例
扫描 3 个端口:
```
python scanner.py --target scanme.nmap.org --ports 22,80,443
```
扫描一个范围:
```
python scanner.py --target 127.0.0.1 --ports 1-100
```
同时显示关闭的端口:
```
python scanner.py --target 127.0.0.1 --ports 22,80,443 --verbose
```
JSON 输出:
```
python scanner.py --target scanme.nmap.org --ports 22,80,443 --json
```
## 工作原理
该脚本使用 `socket` 在每个端口上打开一个 TCP 连接。
如果连接成功,则该端口被视为开放。
接着,脚本会尝试读取一小段 banner。对于 HTTP,它会发送一个非常简单的 `HEAD` 请求。
服务的名称首先来自于一个已知端口字典,随后可能会根据 banner 进行调整。
## 文本输出示例
```
[OUVERT] 22/tcp - SSH
[OUVERT] 80/tcp - HTTP
banniere: HTTP/1.1 200 OK
```
## JSON 输出示例
```
{
"target": "scanme.nmap.org",
"results": [
{
"port": 22,
"state": "open",
"service": "SSH",
"banner": "SSH-2.0-OpenSSH"
},
{
"port": 80,
"state": "open",
"service": "HTTP",
"banner": "HTTP/1.1 200 OK"
}
]
}
```
## 局限性
- 无 UDP 扫描
- 无并行扫描
- 无高级检测
- 无法为 HTTPS banner 处理 TLS
- 结果可能会因防火墙或网络环境的不同而有所差异
## 改进建议
- 添加多线程
- 从文件读取目标列表
- 添加 CSV 输出
- 添加一些测试
## 许可证
MIT。详见 `LICENSE`。
标签:API安全, argparse, Banner获取, DNS查询工具, DNS解析, IP扫描, JSON输出, Python, Socket编程, TCP协议, URL短链接分析, 开源项目, 插件系统, 攻击路径可视化, 无后门, 无外部依赖, 服务器安全, 服务探测, 端口扫描器, 网络安全, 网络安全学习, 逆向工具, 隐私保护, 黑客工具