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, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 逆向工具, 隐私保护