thisasg-dev/Network-Port-Scanner
GitHub: thisasg-dev/Network-Port-Scanner
一款零外部依赖的 Python 多线程端口扫描器,提供 GUI 与 CLI 双界面,可快速发现开放端口、识别服务并抓取 Banner。
Stars: 1 | Forks: 0
# 🔍 网络端口扫描器
一个基于 Python 的综合网络端口扫描器,提供 CLI 和 GUI 双界面。扫描任何设备上的开放端口,以发现服务并评估网络安全。
## ✨ 功能特性
### 🎯 核心功能
- ✅ IP 地址验证和主机名解析
- ✅ 自定义端口范围选择
- ✅ 多线程扫描,实现极速性能
- ✅ 开放端口检测及服务识别
- ✅ 精确的扫描耗时测量
### ⚡ 进阶功能
- ✅ 服务名称检测(SSH、HTTP、FTP 等)
- ✅ 快速扫描(常用端口)和全端口扫描(1-65535)模式
- ✅ 全面的错误处理机制
- ✅ 实时进度显示
- ✅ 线程数优化
- ✅ 自定义 socket 超时时间
### 🔥 高级功能
- ✅ 从开放端口获取 Banner 信息
- ✅ 主机名/反向 DNS 查询
- ✅ 将扫描结果保存至文件
- ✅ 基于 tkinter 的 GUI 界面
- ✅ 多线程架构
- ✅ 服务映射数据库
## 📂 项目结构
```
port_scanner/
│
├── main.py # CLI interface
├── gui.py # GUI interface (tkinter)
├── scanner.py # Core scanning engine
├── utils.py # Utility functions
├── requirements.txt # Dependencies
└── README.md # This file
```
## 🚀 快速入门
### 前置条件
- Python 3.7 或更高版本
- 无需外部依赖(仅使用标准库)
### 安装说明
1. **克隆或下载项目:**
```
cd port_scanner
```
2. **验证 Python 安装:**
```
python --version
```
## 📱 用法
### CLI 版本(命令行)
运行 CLI 扫描器:
```
python main.py
```
**交互式提示:**
1. 输入目标 IP 地址(例如:127.0.0.1 或 localhost)
2. 选择扫描模式:
- 快速扫描(常用端口)
- 全端口扫描(1-65535)
- 自定义范围
- 指定端口
3. 配置超时时间和线程数
4. 查看结果并选择是否保存
**示例:**
```
Enter target IP: 127.0.0.1
[OPEN] Port 22 → SSH
[OPEN] Port 80 → HTTP
[OPEN] Port 443 → HTTPS
Scan completed in 1.8 seconds
```
### GUI 版本(图形界面)
运行 GUI 扫描器:
```
python gui.py
```
**功能:**
- 📡 用于配置的扫描器选项卡
- 📊 用于查看扫描结果的结果选项卡
- ℹ️ 包含帮助信息的关于选项卡
- 🎨 井然有序的选项卡界面
- 💾 保存和复制功能
## 🔧 配置选项
### 扫描模式
**⚡ 快速扫描:**
- 最快的方法
- 仅扫描常用端口
- 适用于初步侦察
- 端口:21, 22, 80, 443, 3306, 3389, 5900, 8080 等
**🔥 全端口扫描:**
- 完整的端口枚举
- 扫描所有 65535 个端口
- 最慢但最全面
- 可能需要几分钟时间
**🎯 自定义范围:**
- 用户自定义的端口范围
- 速度与覆盖范围之间的平衡
- 示例:1-1024 用于扫描知名端口
**🔨 指定端口:**
- 扫描确切的端口
- 格式:22,80,443,8080-8090
- 最适合针对性扫描,效率最高
### 高级选项
```
timeout=1 # Socket timeout in seconds (0.1-10)
threads=50 # Number of concurrent threads (1-200)
banner=True # Enable service banner grabbing
```
## 📊 输出示例
### 扫描成功
```
============================================================
🔍 PORT SCANNER
============================================================
Target: 127.0.0.1 (127.0.0.1)
Scanning ports: 1 - 1024
Threads: 50
============================================================
[OPEN PORTS FOUND: 3]
[OPEN] Port 22 → SSH
└─ OpenSSH_7.4 (protocol 2.0)
[OPEN] Port 80 → HTTP
└─ Apache/2.4.6 (CentOS)
[OPEN] Port 443 → HTTPS
└─ Apache/2.4.6 (CentOS)
============================================================
⏱️ Scan completed in 2.34 seconds
📊 Total ports scanned: 1024
🎯 Open ports: 3
============================================================
```
### 无结果
```
❌ No open ports found.
Scan completed in 1.2 seconds
Total ports scanned: 1024
```
## 🔐 常用端口参考
| 端口 | 服务 | 描述 |
|------|---------|-------------|
| 21 | FTP | 文件传输协议 |
| 22 | SSH | 安全外壳协议 |
| 23 | Telnet | 远程登录 |
| 25 | SMTP | 电子邮件发送 |
| 53 | DNS | 域名系统 |
| 80 | HTTP | Web 服务器 |
| 110 | POP3 | 电子邮件检索 |
| 143 | IMAP | 电子邮件协议 |
| 443 | HTTPS | 安全 Web |
| 445 | SMB | 文件共享 |
| 3306 | MySQL | 数据库 |
| 3389 | RDP | 远程桌面 |
| 5432 | PostgreSQL | 数据库 |
| 5900 | VNC | 远程查看器 |
| 8080 | HTTP-Alt | 备用 Web |
| 27017| MongoDB | NoSQL 数据库 |
| 6379 | Redis | 缓存服务器 |
## ⚠️ 重要法律声明
### ✅ 合法使用:
- **仅扫描您自己的系统**
- 扫描**已授权的实验室环境**
- 扫描**您拥有或已获准测试的网络**
- 用于**网络安全教育与培训**
- 用于**授权的安全评估**
### ❌ 非法使用:
- 未经许可扫描**未知/公共系统**
- 扫描**他人的网络**
- 未经授权的**安全测试**
- **出于恶意目的的端口扫描**
- 违反**计算机欺诈和滥用法案 (CFAA)**
**未经授权使用此工具可能会导致:**
- 刑事指控
- 民事责任
- 监禁
- 罚款
## 💡 提示与技巧
### 性能提示
1. **首先使用快速扫描** - 快速识别服务
2. **调整线程数** - 增加到 100+ 以加快扫描速度
3. **减少超时时间** - 在响应迅速的网络上速度更快
4. **扫描特定范围** - 避免不必要的端口检查
### 故障排除
**"Invalid IP address"(无效的 IP 地址)**
- 验证 IP 格式:XXX.XXX.XXX.XXX
- 或使用主机名:localhost, example.com
**"Connection refused"(连接被拒绝)**
- 关闭端口的正常响应
- 无需采取任何操作
**"Permission denied"(权限被拒绝)**
- 在 Windows 上:以管理员身份运行
- 在 Linux/Mac 上:使用 `sudo python3 main.py`
**扫描速度慢**
- 增加线程数
- 减少 socket 超时时间
- 使用快速扫描模式
- 缩小端口范围
## 🎓 学习成果
通过使用此项目,您将学到:
- ✅ 网络和 TCP/IP 的工作原理
- ✅ Python 中的 Socket 编程
- ✅ 多线程概念
- ✅ 端口扫描技术
- ✅ 服务识别
- ✅ 网络安全基础知识
- ✅ 网络侦察
- ✅ 道德黑客概念
## 🛠️ 开发
### 代码结构
**scanner.py** - 核心扫描逻辑
```
PortScanner # Main scanner class
├── scan_port() # Single port scan
├── start_scan() # Multi-threaded scanning
├── display_results()
└── save_results()
QuickScan # Pre-configured quick scan
FullScan # Pre-configured full scan
```
**utils.py** - 实用工具函数
```
validate_ip() # IP validation
get_service_name() # Service lookup
banner_grab() # Banner grabbing
get_hostname() # Reverse DNS lookup
parse_port_range() # Port range parsing
```
**main.py** - CLI 界面
```
print_banner() # Display header
get_ip_input() # Input validation
get_port_range_input()
get_scan_options()
```
**gui.py** - GUI 实现
```
PortScannerGUI # Main GUI class
├── setup_ui()
├── setup_scan_tab()
├── setup_results_tab()
└── _perform_scan()
```
### 项目扩展
1. **添加 nmap 集成:**
```
import subprocess
subprocess.run(['nmap', '-p', ports, target])
```
2. **添加数据库日志记录:**
```
import sqlite3
conn = sqlite3.connect('scans.db')
```
3. **添加调度功能:**
```
from apscheduler.schedulers.background import BackgroundScheduler
scheduler.add_job(scan_network, 'cron', day_of_week='mon-fri', hour=9)
```
4. **添加 Web 界面:**
```
from flask import Flask
app = Flask(__name__)
@ app.route('/scan')
def web_scan():
return render_template('scan.html')
```
## 🐛 已知限制
1. **防火墙拦截** - 在防火墙后结果可能不准确
2. **网络延迟** - 慢速网络可能会出现漏报
3. **速率限制** - ISP 可能会拦截过量的扫描流量
4. **UDP 端口** - 目前仅扫描 TCP(UDP 扫描需要 root 权限)
5. **IPv6** - 目前仅支持 IPv4
## 📝 版本历史
### v1.0(当前版本)
- ✅ 核心 CLI 扫描器
- ✅ 多线程支持
- ✅ GUI 界面
- ✅ Banner 抓取
- ✅ 服务检测
- ✅ 结果保存
## 🤝 参与贡献
欢迎贡献代码!以下是可以改进的方向:
- UDP 端口扫描
- IPv6 支持
- 检测规避技术
- 性能优化
- 更多 GUI 功能
## 📄 许可证
此教育项目旨在用于学习网络安全概念。请负责任且合法地使用。
## 📞 支持与文档
- **Python Socket 模块:** https://docs.python.org/3/library/socket.html
- **Threading:** https://docs.python.org/3/library/threading.html
- **Tkinter GUI:** https://docs.python.org/3/library/tkinter.html
## ⚡ 快速参考
**检查端口 80:**
```
python main.py
# 输入: 127.0.0.1
# 选择: Custom Range
# Ports: 80-80
```
**快速扫描 localhost:**
```
python main.py
# 输入: localhost
# 选择: Quick Scan
```
**使用 GUI 进行全端口扫描:**
```
python gui.py
# 输入: 192.168.1.1
# 选择: Full Scan
# 点击: Start Scan
```
**⚠️ 请记住:** 仅扫描您拥有或已获得明确许可进行测试的系统。未经授权的端口扫描是非法且不道德的。
# 🎯 **祝您扫描愉快!**(在合法和符合道德的前提下)
# Network-Port-Scanner
一个基于 Python 构建的高性能端口扫描器,专为快速网络审计和高效的服务发现而设计。该工具利用多线程和 Socket 编程来扫描 TCP 端口、解析主机名,并执行 Banner 抓取以识别服务和版本信息。
该应用程序采用双界面设计,提供用户友好的 Tkinter GUI 和功能强大的 CLI,以适应不同环境的灵活性需求。
🔧 关键特性
⚡ 多线程扫描,实现高速性能
🌐 TCP 端口扫描和主机名解析
🛰️ 通过抓取 Banner 进行服务/版本检测
🖥️ 双界面:GUI (Tkinter) + 命令行界面
🔄 异步处理以优化执行效率
✅ 强大的数据验证和错误处理机制
📡 基于核心网络协议构建
🎯 应用场景
网络安全审计
服务发现与分析
网络安全与网络相关的教育用途
标签:Python, socket编程, T1059.006, TCP扫描, Tkinter, Windows内核, XML 请求, 二进制发布, 反取证, 图形用户界面, 安全开发, 安全评估, 开源工具, 插件系统, 数据统计, 无后门, 服务发现, 横幅抓取, 漏洞扫描前置, 白帽子, 端口扫描, 网络安全, 网络安全实训, 网络审计, 网络工具, 逆向工具, 隐私保护