Esha-21/Network-Port-Scanner
GitHub: Esha-21/Network-Port-Scanner
一个零依赖、带深色 GUI 的 Python 端口扫描器,支持 TCP/UDP 扫描、Banner 抓取和 CIDR 范围输入。
Stars: 0 | Forks: 0
# 🔍 带图形界面的网络端口扫描器
一个基于 Python 的网络安全工具,用于扫描任意目标 IP、主机名或 CIDR 范围的 TCP 和 UDP 端口 —— 具有使用 Tkinter 构建的深色终端风格图形用户界面。
## ✨ 功能特性
- **TCP 与 UDP 扫描** — 单独或同时扫描两种协议
- **多线程** — 使用 `ThreadPoolExecutor` 进行并发扫描(支持 100+ 线程)
- **Banner 抓取** — 识别开放 TCP 端口上的服务 Banner
- **CIDR 范围支持** — 扫描整个子网(例如 `192.168.1.0/24`)
- **常见服务检测** — 识别 60+ 种知名服务(SSH、HTTP、MySQL、Redis 等)
- **实时进度** — 扫描时显示实时进度条和控制台输出
- **颜色编码结果** — 开放(绿色)、已过滤(黄色)、关闭(暗淡)端口状态
- **导出功能** — 将结果保存为 JSON 或 CSV 以便报告
- **深色 GUI** — 专业的终端主题 Tkinter 界面
## 📁 项目结构
```
project/
├── Scanner.py # Core scanning engine (CLI + logic)
├── Scanner_GUI.py # Tkinter GUI frontend
└── README.md # This file
```
## ⚙️ 系统要求
- Python 3.10 或更高版本
- 无需外部依赖包 —— 仅使用 Python 标准库:
- `socket`, `threading`, `concurrent.futures`
- `tkinter`, `json`, `csv`, `ipaddress`
## 🚀 安装说明
1. **克隆仓库:**
git clone https://github.com/yourusername/network-port-scanner.git
cd network-port-scanner
2. **确保两个文件位于同一文件夹中:**
Scanner.py
Scanner_GUI.py
3. 无需 pip 安装 —— 所有模块均为 Python 内置。
## 🖱️ GUI 界面概览
| 区域 | 描述 |
|----------------|--------------------------------------------------------|
| **Target** | 输入 IP 地址、主机名或 CIDR 范围 |
| **Ports** | 输入 `common` 扫描常用端口,或自定义如 `1-1024` |
| **Protocol** | 选择 TCP、UDP 或两者 |
| **Options** | 切换 Banner 抓取、显示关闭端口、设置超时时间 |
| **Export** | 选择 JSON 和 CSV 文件的输出路径 |
| **Console** | 带有颜色编码状态的实时流式输出 |
| **Results** | 包含端口、协议、状态、服务、延迟、Banner 的结果表格 |
## 🔧 命令行选项
| 参数标志 | 描述 | 默认值 |
|---------------------|--------------------------------------------------|-----------|
| `target` | 目标 IP、主机名或 CIDR 范围 | 必填 |
| `-p, --ports` | 端口规格:`common`、`1-1024`、`22,80,443` | `common` |
| `--tcp` | 启用 TCP 扫描 | 启用 |
| `--udp` | 启用 UDP 扫描 | 禁用 |
| `--banners` | 尝试抓取 Banner(仅限 TCP) | 关闭 |
| `--closed` | 在输出中显示关闭的端口 | 关闭 |
| `--timeout` | Socket 超时时间(秒) | `1.0` |
| `--threads` | 线程池大小 | `100` |
| `--export-json` | 将结果导出为 JSON 文件 | — |
| `--export-csv` | 将结果导出为 CSV 文件 | — |
| `-v, --verbose` | 详细输出模式 | 关闭 |
## 📤 导出格式
### JSON
```
{
"target": "45.33.32.156",
"hostname": "scanme.nmap.org",
"scan_start": "2026-04-02T10:00:00",
"scan_end": "2026-04-02T10:00:01",
"duration_sec": 1.02,
"total_ports_scanned": 3,
"open_ports": [22, 80],
"results": [
{ "port": 22, "protocol": "TCP", "state": "open", "service": "SSH", "banner": "", "latency_ms": 424.6 }
]
}
```
### CSV
```
target,hostname,port,protocol,state,service,banner,latency_ms
45.33.32.156,scanme.nmap.org,22,TCP,open,SSH,,424.6
45.33.32.156,scanme.nmap.org,80,TCP,open,HTTP,,410.4
```
## 🧰 技术栈
| 技术 | 用途 |
|---------------------|--------------------------------------------------|
| Python 3 | 核心语言 |
| Tkinter | GUI 框架(内置) |
| socket | TCP/UDP 端口探测和 Banner 抓取 |
| ThreadPoolExecutor | 多线程并发扫描 |
| ipaddress | CIDR 范围解析和主机枚举 |
| json / csv | 结果导出 |
## 💡 使用示例
**扫描公网主机的常用端口:**
```
python Scanner.py scanme.nmap.org
```
**扫描指定端口:**
```
python Scanner.py 192.168.1.1 -p 22,80,443,8080
```
**启用 UDP 和 Banner 抓取的完整扫描:**
```
python Scanner.py 10.0.0.1 -p 1-1024 --tcp --udp --banners
```
**导出结果:**
```
python Scanner.py example.com --export-json results.json --export-csv results.csv
```
**扫描子网:**
```
python Scanner.py 192.168.1.0/24
```
## 📄 许可证
本项目是 AICTE 实习计划(2026 年 3 月)的一部分开发完成。
仅供教育用途。请勿扫描您不拥有或未获授权测试的网络。
标签:AES-256, Banner抓取, CIDR支持, DNS查询工具, GitHub, GUI工具, JSON导出, Python, Qt框架, socket编程, TCP扫描, Tkinter, 安全工具开发, 密码管理, 开源安全项目, 插件系统, 无后门, 服务识别, 桌面应用, 漏洞评估, 端口扫描器, 系统独立性, 网段扫描, 网络安全, 逆向工具, 隐私保护