Srishti233/Port_Scanner
GitHub: Srishti233/Port_Scanner
一个纯 Python 标准库实现的轻量级 TCP 端口扫描器,提供多线程扫描、Banner 抓取、风险评估和多格式报告导出,用于快速网络侦察与服务发现。
Stars: 0 | Forks: 0
# 🔍 Python 网络端口扫描器
[](https://python.org)
[](LICENSE)
[]()
一个使用 Python 标准库构建的专业级 TCP 端口扫描器 — 既可作为网络安全专业学生的**学习工具**,也是一个展示真实世界套接字编程、多线程和网络侦察概念的**作品集项目**。
## 📸 示例输出
```
╔═══════════════════════════════════════════════════════════╗
║ Python Network Port Scanner v1.0.0 ║
╚═══════════════════════════════════════════════════════════╝
Target : 127.0.0.1 | Ports: 17 | Threads: 17 | Timeout: 1.0s
[OPEN] Port 22 (SSH)
[OPEN] Port 80 (HTTP)
[OPEN] Port 443 (HTTPS)
[██████████████████████████████] 100.0% (17/17 ports)
Scan complete in 1.34 seconds
PORT STATUS SERVICE RISK BANNER
══════════════════════════════════════════════════════════
22 OPEN SSH MEDIUM SSH-2.0-OpenSSH_8.9
80 OPEN HTTP LOW
443 OPEN HTTPS LOW
══════════════════════════════════════════════════════════
Open: 3 | Filtered: 2 | Closed: 12
Reports saved:
[TXT] reports/scan_127_0_0_1_20241215_143022.txt
[CSV] reports/scan_127_0_0_1_20241215_143022.csv
[JSON] reports/scan_127_0_0_1_20241215_143022.json
```
## 🚀 功能
| 功能 | 描述 |
|---|---|
| **TCP Connect 扫描** | 完整的三次握手端口检测 |
| **多线程** | 可配置的线程池(默认:100 个线程) |
| **Banner 抓取** | 检测服务版本(SSH、FTP、HTTP 标头) |
| **主机解析** | 扫描主机名或 IP — 自动进行 DNS 查找 |
| **端口范围** | 支持扫描单个端口、逗号分隔列表或范围(1-65535) |
| **风险评估** | 将开放端口归类为高 / 中 / 低风险 |
| **多格式导出** | 支持 TXT、CSV 和 JSON 格式的报告 |
| **日志系统** | 每次扫描会话均带时间戳记录 |
| **彩色输出** | 彩色终端界面(开放=绿色,风险=红色/黄色) |
| **CLI 界面** | 完整的基于 argparse 的命令行界面,并附带 --help 文档 |
| **进度条** | 实时显示扫描进度及百分比指示器 |
## 📁 项目结构
```
port_scanner/
├── main.py # Entry point — run this
├── requirements.txt # Dependencies (stdlib only)
├── README.md
│
├── core/
│ ├── __init__.py
│ └── scanner.py # PortScanner class, scan_port(), banner grabbing
│
├── utils/
│ ├── __init__.py
│ ├── colors.py # ANSI terminal colors + banner
│ ├── cli.py # argparse CLI argument definitions
│ ├── logger.py # Logging system
│ └── reporter.py # TXT / CSV / JSON report generation
│
├── reports/ # Auto-created — scan reports saved here
└── logs/ # Auto-created — session logs saved here
```
## ⚡ 快速开始
```
# Clone 仓库
git clone https://github.com/yourusername/python-port-scanner.git
cd python-port-scanner
# 无需安装依赖 — 仅使用 Python stdlib!
# 要求 Python 3.11+
# Scan localhost(在自己的机器上测试是安全的)
python main.py -t 127.0.0.1
# Scan 带有详细输出的主机名
python main.py -t scanme.nmap.org --verbose
# 自定义端口范围
python main.py -t 192.168.1.1 -p 1-1024
# 仅特定端口
python main.py -t 10.0.0.1 -p 80,443,8080,8443
# Fast scan — 更多线程,更短 timeout,无 banner
python main.py -t 192.168.1.1 -p 1-10000 --threads 500 --timeout 0.5 --no-banner
# 查看所有选项
python main.py --help
```
## 🎛️ CLI 参考
```
usage: port_scanner [-h] -t HOST [-p PORTS | --common]
[--threads N] [--timeout SEC]
[--no-banner] [--verbose] [--no-save]
Options:
-t, --target HOST Target IP or hostname (required)
-p, --ports PORTS Ports: range (1-1024), list (80,443), or single (22)
--common Scan built-in common ports (default)
--threads N Concurrent threads (default: 100)
--timeout SEC Socket timeout in seconds (default: 1.0)
--no-banner Skip banner grabbing for faster scans
--verbose, -v Show closed and filtered ports
--no-save Do not write report files
```
## 🧠 涵盖的网络安全概念
### 什么是端口扫描?
端口扫描是**网络侦察**的第一阶段 —— 攻击者(或安全测试人员)借此发现目标机器上正在运行的服务。每个开放端口都是一个潜在的入口点。
### TCP Connect 与 SYN 扫描对比
| 扫描类型 | 工作原理 | 可检测性 | 需要 root 权限? |
|---|---|---|---|
| **TCP Connect**(本工具) | 完整的三次握手 | 容易被检测到 | 否 |
| **SYN 扫描**(隐蔽扫描) | 发送 SYN,读取响应,发送 RST | 较难被检测到 | 是(原始套接字) |
| **UDP 扫描** | 发送 UDP 数据包,等待 ICMP 错误 | 速度慢,不可靠 | 是 |
### 端口状态
- **开放**:服务正在主动监听 —— 收到了 SYN-ACK
- **关闭**:主机响应了 RST —— 端口存在但没有程序监听
- **被过滤**:没有响应 —— 防火墙正在静默丢弃数据包
### 常见高风险端口
| 端口 | 服务 | 风险 |
|---|---|---|
| 21 | FTP | 通常允许匿名登录 |
| 23 | Telnet | 明文凭据传输 |
| 445 | SMB | EternalBlue/WannaCry 漏洞利用载体 |
| 3389 | RDP | 暴力破解目标 |
| 5900 | VNC | 通常安全性较差 |
### Banner 抓取
服务在您连接时会发送一条**问候消息**。这会暴露软件版本号,攻击者可以将其与 CVE 数据库进行交叉比对,以查找已知漏洞。
## 🧪 安全测试
```
# 始终安全 — 您自己的机器
python main.py -t 127.0.0.1
python main.py -t localhost
# 合法的外部练习 target(nmap.org 授权此操作)
python main.py -t scanme.nmap.org
```
## 🔮 未来升级构想
- [ ] **GUI** — Tkinter 或 PyQt5 桌面界面
- [ ] **Web 仪表盘** — Flask + Chart.js 实时可视化
- [ ] **UDP 扫描** — 基于 ICMP 的不可达检测
- [ ] **OS 指纹识别** — TTL 分析、TCP 窗口大小检测
- [ ] **CVE 查找** — 将开放服务与 NVD API 进行交叉比对
- [ ] **网络范围扫描** — 支持 CIDR 表示法(192.168.1.0/24)
- [ ] **Nmap 集成** — python-nmap 包装器,用于高级扫描类型
- [ ] **异步 I/O** — asyncio + aioconsole 以实现更高的性能
- [ ] **Docker** — 容器化部署
## 📄 许可证
MIT License — 可免费用于教育和经授权的安全测试。
标签:Banner Grabbing, Cloudflare, CSV, DNS枚举, JSON, MacOS, meg, MITRE ATT&CK, MIT协议, Python, Python 3.11, Qt框架, Socket编程, TCP扫描, TXT, 主机名解析, 作品集项目, 信息安全, 安全, 开源, 彩色输出, 报告导出, 插件系统, 攻击路径可视化, 数据导出, 数据展示, 数据统计, 无后门, 服务识别, 端口扫描, 系统分析, 红队, 编程学习, 网络分析, 网络安全, 网络安全工具, 网络安全教学, 超时处理, 逆向工具, 隐私保护, 黑客工具