mrrobot404a/port-scanner
GitHub: mrrobot404a/port-scanner
一个用 Python 实现的端口扫描器学习项目,提供纯 Socket 和 Nmap 两种版本以对比理解网络扫描原理。
Stars: 0 | Forks: 0
# 端口扫描器
什么是端口扫描器?
它是一种用于检查主机上哪些网络端口处于开放、关闭或被过滤状态的工具,旨在确定哪些服务是可用且可访问的。
下面我已经制作了 2 个基础版本的端口扫描器:
- **`portscan_socket_method.py`** — 纯 Python 编写,使用内置的 `socket` 模块。无外部依赖。展示了 TCP connect 扫描的工作原理。
- **`portscan.py`** — 使用 `python-nmap` 库来访问 Nmap 扫描引擎,以进行更深入的扫描和服务检测。
构建这个项目是为了了解端口扫描器的功能,以及比较从头开始编写的扫描器与使用诸如 Nmap 等行业标准工具的扫描器之间的区别。
## 对比
| **功能** | **Socket 版本** | **Nmap 版本** |
| :------------------------ | :----------------: | :------------------: |
| 使用 Python sockets 构建 | 是 | 否 |
| 外部依赖项 | 无 | Nmap + `python-nmap` |
| TCP connect 扫描 | 是 | 是 |
| 服务检测 | 否 | 是 |
| 操作系统检测 | 否 | 是 |
| 最适合学习 | 极佳 | 不太理想 |
| 快速扫描 | 有限 | 快速 |
## 设置
### Socket 版本(无依赖项)
只需要 Python,但我使用的是最新版本,即 3.9+(使用了诸如 `tuple[int, int]` 的类型提示)。
```
python portscan_socket_method.py
```
### Nmap 版本
需要安装 Nmap 本体,以及 Python 包装器。
**Windows:**
1. Nmap 链接:https://nmap.org/download.html#windows(在安装期间接受 Npcap 提示)
2. `pip install python-nmap`
**Linux (Debian/Kali/Ubuntu):**(我还没有在 Linux 上尝试过,因此不能保证它能正常工作)
```
sudo apt install nmap python3-pip
pip install python-nmap
```
然后运行:
```
python portscan.py
```
## 用法
这两个脚本都支持交互式提示或命令行参数:
```
# 交互式
python portscan_socket_method.py
# 使用 flags
python portscan_socket_method.py -t 10.0.0.5 -p 20-100
python portscan_socket_method.py -t 10.0.0.5 -p 20-100 --timeout 1.0
```
| 参数 | 描述 |
|------|-------------|
| `-t`, `--target` | 目标 IPv4 地址 |
| `-p`, `--ports` | 端口范围,格式为 `<下限>-<上限>`,例如 `20-100` |
| `--timeout` |(仅限 Socket 版本)单端口超时时间(秒),默认为 `0.5` |
## 示例输出
```
Scanning 45.33.32.156 on ports 20-100 (timeout=0.5s)...
Port 20: closed
Port 22: open
Port 80: open
...
Done. 2 open port(s): [22, 80]
```
## 法律声明
仅扫描您拥有或获得明确测试权限的系统。在未经授权的情况下扫描网络或主机在大多数司法管辖区都是违法的。适合练习的良好目标:
- `127.0.0.1` (localhost)
- 您自己的路由器/LAN 设备
- 您自己实验室中的虚拟机(例如 Metasploitable)
- [scanme.nmap.org](https://nmap.org/) — Nmap 官方的公共测试目标
## 路线图 / 未来改进
- [ ] 添加多线程,以加快对大端口范围的扫描速度
- [ ] 在单次 Nmap 调用中支持全范围扫描,而不是逐个端口循环
- [ ] 将结果导出为 CSV/JSON
- [ ] 基础服务 banner grabbing
## 许可证
见 [许可证](LICENSE)。
标签:CTI, Maven构建, Nmap, Python, 插件系统, 数据统计, 无后门, 端口扫描, 网络发现, 网络安全, 网络工具, 虚拟驱动器, 逆向工具, 隐私保护