aedilkha/python-port-scanner
GitHub: aedilkha/python-port-scanner
用 Python 从零实现的轻量端口扫描器,帮助用户在 CTF 和安全学习中理解网络侦察的基本原理。
Stars: 0 | Forks: 0
# Python 端口扫描器 — Red Team CTF (BeCode)
一个从零开始使用 Python 编写的端口扫描器,专为 Red vs Blue CTF 项目设计。
它通过模拟渗透测试中侦察阶段的方式,来映射网络及其服务:
发现活动主机、寻找开放端口,并对每个端口的状态进行分类。
## 功能
- 扫描单个目标或整个子网 (CIDR)
- 三种扫描技术:**TCP connect**、**SYN** (半开)、**UDP**
- **all** 模式:在一次运行中结合最佳 TCP 方法和 UDP
- 跨子网的**主机发现**
- 端口状态:**open / closed / filtered**
- 将结果保存为 **JSON / CSV / TXT**
- 简洁的模块化代码,带有类型提示和错误处理
## 环境要求
- Python 3
- [scapy](https://scapy.net/) — 仅在进行 SYN 扫描时需要
```
pip install scapy --break-system-packages # or: sudo apt install python3-scapy
```
## 用法
最简单的方式是使用 `run.sh` 包装脚本:
```
chmod +x run.sh # once
./run.sh --help # show help
./run.sh 192.168.20.11 # connect scan, ports 1-1024
./run.sh 192.168.20.11 1-65535 # custom port range
./run.sh 192.168.20.11 53,123 udp # UDP scan
sudo ./run.sh 192.168.20.11 1-1000 syn # SYN scan (needs sudo)
sudo ./run.sh 192.168.20.11 1-1000 all # TCP + UDP together
./run.sh 192.168.20.0/24 discover # host discovery on a subnet
```
或者直接调用扫描器以完全控制各项选项:
```
python3 scanner/scanner.py --target 192.168.20.11 --ports 1-1000 --type connect --output results.json
python3 scanner/scanner.py --target 192.168.20.0/24 --discover
python3 scanner/scanner.py --help
```
### 选项
| 选项 | 描述 |
|--------------|--------------------------------------------------------|
| `--target` | IP、主机名或 CIDR (例如 `192.168.20.0/24`) |
| `--ports` | 端口范围或列表:`1-1000` 或 `22,80,443` |
| `--type` | `connect` (默认)、`syn`、`udp`、`all` |
| `--discover` | 主机发现模式 (查找子网中的活动主机) |
| `--timeout` | 每个端口/主机的最长等待时间,以秒为单位 |
| `--threads` | connect 扫描的并行工作线程数 |
| `--output` | 将结果保存到文件:`.json`、`.csv` 或 `.txt` |
## 与 nmap 的对应关系
该扫描器重现了 nmap 的核心扫描类型:
| 本扫描器 | nmap 等效命令 |
|-----------------|-------------------|
| connect 扫描 | `nmap -sT` |
| SYN 扫描 | `nmap -sS` |
| UDP 扫描 | `nmap -sU` |
| 主机发现 | `nmap -sn` |
| all (TCP + UDP) | `nmap -sS -sU` |
| 端口范围 | `nmap -p 1-1000` |
| 保存到文件 | `nmap -oN` / `-oX`|
它能完成**映射**工作 (即确定哪些端口和主机)。但它**不会**进行 nmap 的
深度识别 —— 没有版本检测 (`-sV`)、操作系统检测 (`-O`) 或漏洞脚本。它是一个学习工具,不能替代 nmap。
## 项目结构
```
python-port-scanner/
├── run.sh # convenience wrapper
├── requirements.txt
├── scanner/
│ ├── scanner.py # CLI entry point
│ ├── tcp_connect.py # TCP connect scan
│ ├── syn_scan.py # SYN scan (scapy)
│ ├── udp_scan.py # UDP scan
│ ├── host_discovery.py # live-host discovery
│ ├── combined.py # "all" mode (TCP + UDP)
│ ├── utils.py # target / port parsing
│ └── output.py # JSON / CSV / TXT export
└── reports/ # project reports
```
请参阅 `reports/01-design-report.md` 了解技术设计以及每种扫描类型背后的原理。
标签:Facebook API, Python, Scapy, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 逆向工具, 隐私保护