Dan-Andrei-Simionescu/DasDuke_port-scanner
GitHub: Dan-Andrei-Simionescu/DasDuke_port-scanner
一款用 Python 标准库编写的模块化 TCP 端口扫描器,通过完整 TCP 握手探测目标端口开放状态并映射服务名称。
Stars: 0 | Forks: 0
# DasDuke 端口扫描器
一款用 Python 编写的模块化 TCP 端口扫描器,基于 `socket`、`argparse` 以及从本地 `services.txt` 文件加载的自定义端口注册表构建。它可以扫描目标 IP 的可配置端口范围,按名称识别开放的端口,并直接在终端中报告结果。
## 功能
- **TCP connect 扫描** — 针对范围内的每个端口,打开一个 socket 并通过 `connect_ex()` 尝试完整的 TCP 握手。返回值为 `0` 表示端口开放;其他值表示端口关闭或被过滤。
- **可配置端口范围** — 传入 `-p -`(例如 `-p 1-1024`)来选择扫描范围。如果省略,则默认为 `1-1024`。
- **服务名称解析** — 开放的端口会与本地 `services.txt` 注册表(格式与 `/etc/services` 相同)进行匹配,并按名称显示(例如 `Port SSH is open!`)。对于未注册的端口,则回退显示为 `UNKNOWN`。
- **“未发现任何内容”反馈** — 如果在该范围内未发现开放的端口,扫描器会明确指出这一点,而不是静默退出。
- **CLI 界面** — 没有交互式提示;所有输入均在启动时作为 flag 传入。
- **模块化结构** — 扫描逻辑、参数解析和端口名称解析拆分在不同的文件中。
## 项目结构
```
Python_port_scanner/
├── port_scanner.py # Main scan loop and result output
├── CL_arguments.py # argparse setup and port range parsing
├── ports.py # services.txt loader and port name lookup
├── services.txt # Custom port registry (name / port / protocol)
└── README.md
```
## 工作原理
**`CL_arguments.py`** 设置参数解析器,读取 `-t`(目标 IP)和 `-p`(端口范围),并将范围字符串拆分为 `start_port` 和 `end_port` 整数,供主脚本导入。
**`ports.py`** 在导入时逐行读取 `services.txt`,跳过注释和空行,并构建一个将端口号映射到服务名称的字典。`find_port_name(port)` 在该字典中查找端口,如果找不到则返回 `UNKNOWN`。
**`port_scanner.py`** 导入这两个模块,遍历端口范围,为每个端口调用 `scan_port()`,并实时打印结果。循环结束后,它会检查 `found_anything` 标志,如果未发现开放的端口,则打印 `Nothing found.`。
## 环境要求
- Python 3.x(无需第三方包 —— 仅使用标准库)
## 用法
```
# Clone 仓库
git clone https://github.com/Dan-Andrei-Simionescu/port-scanner.git
cd port-scanner
# 扫描目标上的 1–1024 端口(默认范围)
python3 port-scanner.py -t 8.8.8.8
# 扫描自定义端口范围
python3 port-scanner.py -t 192.168.1.1 -p 20-500
# 扫描单个端口
python3 port-scanner.py -t 192.168.1.1 -p 80-80
```
标签:Python, TCP协议, 插件系统, 数据统计, 无后门, 端口扫描, 网络工具, 逆向工具