AkshayP47/Port_Scanner

GitHub: AkshayP47/Port_Scanner

一款基于 Python 标准库、零外部依赖的专业级多线程 TCP 端口扫描器,提供服务识别与多格式报告导出功能。

Stars: 0 | Forks: 0

# 专业 TCP 端口扫描器 一个全面、**生产就绪的端口扫描器**,使用 Python 内置库构建。专为网络安全专业人员、学生和作品集展示而设计。 ## 🎯 项目概述 本项目展示了专业级的网络安全工具开发,无需依赖 Nmap 等外部工具。它非常适合: - 学习网络基础知识的网络安全学生 - 展示编程和网络技能的作品集项目 - 安全相关职位的面试准备 - 在实践层面理解 TCP/IP 协议 ## ✨ 功能 ### 核心功能 - ✅ **TCP 端口扫描** - 使用原始 socket 检测开放/关闭的端口 - ✅ **多线程扫描** - 支持配置线程数的快速并发端口扫描 - ✅ **服务识别** - Banner 抓取与服务检测 - ✅ **进度跟踪** - 实时扫描进度条 - ✅ **详细计时** - 扫持续时间和时间戳 - ✅ **优雅的错误处理** - 网络错误、超时、无效输入 ### 导出格式 - ✅ **JSON** - 机器可读格式 - ✅ **CSV** - 兼容电子表格的格式 - ✅ **TXT** - 人类可读报告 ### 高级功能 - ✅ **Banner 抓取** - 从响应中提取服务信息 - ✅ **服务映射** - 识别 15+ 种常见服务 - ✅ **风险评估** - 标记高风险的开放端口 - ✅ **彩色输出** - 专业的终端格式化 - ✅ **全面的日志记录** - 调试和操作日志 ## 📋 要求 ### 必备条件 - **Python 3.7+**(推荐 3.10+) ### 可选(用于开发) - pytest - 用于单元测试 - pylint - 用于代码质量检查 - black - 用于代码格式化 ### 依赖项 **核心功能零外部依赖!** 仅使用 Python 标准库: - `socket` - 网络通信 - `threading` + `concurrent.futures` - 并发执行 - `argparse` - CLI 界面 - `json` / `csv` - 报告生成 - `logging` - 应用程序日志记录 - `ipaddress` - IP 验证 ## 🚀 安装与设置 ### 1. 克隆仓库 ``` cd d:\CODE\cyber\port_scanner ``` ### 2. 验证 Python 安装 ``` python --version # 应显示 Python 3.7+ ``` ### 3. (可选)创建虚拟环境 ``` # Windows python -m venv venv venv\Scripts\activate # Linux/macOS python3 -m venv venv source venv/bin/activate ``` ### 4. 安装开发依赖(可选) ``` pip install -r requirements.txt ``` ## 💻 用法 ### 基本扫描 **扫描默认端口范围(1-65535):** ``` python main.py --target 192.168.1.1 ``` **扫描特定端口范围:** ``` python main.py --target 192.168.1.1 --start-port 1 --end-port 1000 ``` ### 性能调优 **增加线程以加快扫描速度:** ``` python main.py --target 192.168.1.1 --threads 100 ``` **调整超时以适应缓慢的网络:** ``` python main.py --target 192.168.1.1 --timeout 2.0 ``` ### Web 前端 使用内置的 Python WSGI 服务器提供了一个简单的基于浏览器的界面。 **运行 Web 前端:** ``` python webapp.py ``` 然后在浏览器中打开: ``` http://127.0.0.1:8000/ ``` Web 界面允许您输入目标 IP、端口范围、线程数、超时和输出格式,然后在浏览器中查看扫描结果。 ``` python main.py --target 192.168.1.1 --timeout 3.0 ``` ### 报告生成 **导出为单一格式:** ``` python main.py --target 192.168.1.1 --output json ``` **导出为多种格式:** ``` python main.py --target 192.168.1.1 --output json,csv,txt ``` **导出所有格式:** ``` python main.py --target 192.168.1.1 --output all ``` **自定义报告目录:** ``` python main.py --target 192.168.1.1 --output-dir ./my_reports ``` ### 详细/静默模式 **启用调试日志:** ``` python main.py --target 192.168.1.1 --verbose ``` **禁止控制台输出:** ``` python main.py --target 192.168.1.1 --quiet ``` ### 完整示例 ``` # Fast scan of web service ports with logging python main.py --target 192.168.1.10 --start-port 80 --end-port 8443 --threads 200 --output json,csv # Comprehensive scan with custom timeout python main.py --target 192.168.1.10 --timeout 2.0 --threads 128 --output all --verbose # 快速 localhost 扫描 python main.py --target 127.0.0.1 --start-port 1 --end-port 10000 --threads 100 ``` ## 📁 项目结构 ``` port_scanner/ ├── main.py # CLI entry point ├── scanner.py # Core scanning engine ├── utils.py # Utility functions & validation ├── banner_grabber.py # Service identification & banner grabbing ├── report_generator.py # Report export (JSON/CSV/TXT) ├── requirements.txt # Dependencies ├── README.md # This file └── sample_reports/ # Example output reports ├── scan_192_168_1_1_20240609_120000.json ├── scan_192_168_1_1_20240609_120000.csv └── scan_192_168_1_1_20240609_120000.txt ``` ## 🔍 工作原理 ### TCP 连接扫描过程 1. **Socket 创建**:为每个端口创建 TCP socket 2. **连接尝试**:发起 3 次握手 3. **响应处理**: - **开放端口**:连接成功(响应代码 0) - **关闭端口**:连接被拒绝(非零响应代码) 4. **Banner 抓取**:尝试读取服务响应 5. **服务识别**:将端口/Banner 映射到已知服务 ### 线程架构 ``` ThreadPoolExecutor (N threads) ├─ Thread 1: Scan port 1 ├─ Thread 2: Scan port 2 ├─ Thread 3: Scan port 3 └─ Thread N: Scan port N ``` 扫描器使用 `concurrent.futures.ThreadPoolExecutor` 进行高效的并发端口扫描,无需手动管理线程。 ### 服务识别 **多级识别:** 1. **端口号分析**:对照常见服务端口进行检查(HTTP:80, SSH:22 等) 2. **Banner 解析**:分析服务响应以获取版本信息 3. **启发式判断**:使用端口范围判断常见服务 4. **默认**:对于无法识别的服务返回“Unknown” ## 🛡️ 安全注意事项 ### 本工具的功能 - 执行 TCP 端口扫描(基于连接,无数据包构造) - 使用标准 socket 库功能 - 识别开放端口和服务 ### 本工具不会做的事 - SYN/隐蔽扫描(需要原始 socket/管理员权限) - UDP 扫描 - 服务漏洞扫描 - 漏洞利用执行 - 网络模糊测试 ### 使用限制 ⚠️ **重要提示**:仅扫描您拥有或获得明确测试许可的网络和系统。未经授权的端口扫描可能是非法的。 ### 网络礼仪 - 高线程数会对网络和目标系统造成压力 - 对于生产/关键系统,请使用 `--threads 50` 或更低设置 - 考虑扫描时间以避免造成中断 - 在测试他人系统之前,务必获得书面授权 ## 📊 示例输出 ### 控制台输出 ``` ================================================================================ PROFESSIONAL PORT SCANNER ================================================================================ Target: 192.168.1.1 Port Range: 1-1000 Threads: 50 Timeout: 1.0s ================================================================================ Progress: [==================================================] 100.0% ================================================================================ SCAN RESULTS FOR 192.168.1.1 ================================================================================ Duration: 12.34 seconds Open Ports: 5 | Closed Ports: 995 -------------------------------------------------------------------------------- Port State Service Description -------------------------------------------------------------------------------- 21 open FTP File Transfer Protocol 22 open SSH Secure Shell 80 open HTTP HyperText Transfer Protocol 443 open HTTPS HTTP Secure 3306 open MySQL MySQL Database ================================================================================ ✓ JSON report: reports/scan_192_168_1_1_20240609_120000.json ✓ CSV report: reports/scan_192_168_1_1_20240609_120000.csv ✓ Text report: reports/scan_192_168_1_1_20240609_120000.txt ⚠ High-Risk Ports Found: [21, 3306] ``` ### JSON 报告示例 ``` { "target": "192.168.1.1", "start_port": 1, "end_port": 1000, "scan_start_time": "2024-06-09T12:00:00", "scan_end_time": "2024-06-09T12:00:12.34", "duration_seconds": 12.34, "total_ports_scanned": 1000, "open_ports_count": 5, "closed_ports_count": 995, "open_ports": [ { "port": 21, "state": "open", "service": "FTP", "description": "File Transfer Protocol", "banner": "220 FTP Server Ready" }, { "port": 22, "state": "open", "service": "SSH", "description": "Secure Shell", "banner": "SSH-2.0-OpenSSH_7.4" } ] } ``` ### CSV 报告示例 ``` Port,State,Service,Description,Banner 21,open,FTP,File Transfer Protocol,220 FTP Server Ready 22,open,SSH,Secure Shell,SSH-2.0-OpenSSH_7.4 80,open,HTTP,HyperText Transfer Protocol, 443,open,HTTPS,HTTP Secure, 3306,open,MySQL,MySQL Database, ``` ## 🎓 学习资源 ### 网络概念解释 **TCP 3 次握手:** 1. 客户端向服务器发送 SYN 2. 服务器响应 SYN-ACK 3. 客户端发送 ACK - 如果成功 → 端口开放 - 如果被拒绝 → 端口关闭 **Socket 编程:** - `socket.socket()` - 创建 socket 对象 - `connect_ex()` - 非阻塞连接尝试 - `recv()` - 从 socket 接收数据 **线程:** - `ThreadPoolExecutor` - 管理 worker 线程 - `concurrent.futures` - 异步任务执行 - `as_completed()` - 在结果完成后进行处理 ### 关键网络安全概念 1. **端口扫描** - 基本的侦察技术 2. **服务识别** - 确定攻击面 3. **风险评估** - 确定漏洞测试的优先级 4. **威胁建模** - 规划安全评估 ## 🚨 限制 - **无原始 Socket**:在没有提升权限的情况下无法执行隐蔽/SYN 扫描 - **单一目标**:需修改以支持批量扫描功能 - **仅限 TCP**:UDP 扫描需要不同的方法 - **无 DNS 解析**:仅使用 IP 地址 - **仅本地日志**:不支持远程日志 - **顺序线程**:对于 CPU 密集型任务受 GIL 限制 ## 📈 未来增强计划 1. **UDP 扫描** - 增加 UDP 端口扫描功能 2. **批量扫描** - 支持多目标和 CIDR 范围 3. **服务指纹识别** - 增强的版本检测 4. **漏洞映射** - 将端口链接到已知的 CVE 5. **数据库导出** - 支持 SQLite/PostgreSQL 6. **Web 仪表板** - 实时扫描仪表板 7. **分布式扫描** - 多机协调 8. **服务脚本支持** - 执行自定义服务探测 ## 🧪 测试 ### 运行测试 ``` pytest tests/ -v pytest tests/ --cov=scanner ``` ### 手动测试 ``` # 使用 localhost 测试 python main.py --target 127.0.0.1 --start-port 80 --end-port 85 # 使用无效输入测试 python main.py --target "invalid" python main.py --target 127.0.0.1 --start-port 70000 # 测试输出格式 python main.py --target 127.0.0.1 --output all ``` ## 📝 代码质量标准 本项目遵循: - **PEP 8** - Python 风格指南 - **Docstrings** - Google 风格的文档 - **Type Hints** - 完整的类型注释(Python 3.7+) - **错误处理** - 全面的异常管理 - **日志记录** - 结构化的事件日志 ### 代码质量检查 ``` pylint main.py scanner.py utils.py banner_grabber.py report_generator.py black main.py scanner.py utils.py banner_grabber.py report_generator.py ``` ## 🤝 贡献 欢迎贡献!可改进的领域包括: - 额外的服务指纹 - 性能优化 - 新的导出格式 - 增强的文档 - 测试覆盖率 ## 📄 许可证 本项目按原样提供,用于教育目的。 ## 🎤 面试谈话要点 **技术深度:** - “使用 ThreadPoolExecutor 实现了多线程扫描,性能提升了 10 倍以上” - “构建了自定义服务识别引擎,将 banner 匹配到 15+ 个已知服务” - “设计了分离关注点(扫描、报告、工具)的模块化架构” **安全知识:** - “展示了对 TCP/IP 3 次握手和连接状态的理解” - “针对网络超时和故障实现了适当的错误处理” - “在工具设计中考虑了提权和网络礼仪” **软件工程:** - “遵循 PEP 8 并保持完整的 type hints 以提高代码清晰度” - “实现了全面的日志记录以进行调试和监控” - “创建了具有参数验证和用户反馈的专业 CLI” **作品集价值:** - “零外部依赖的生产就绪工具” - “全面的文档和示例报告” - “展示了完整的软件开发生命周期” ## 📞 支持 如有问题、疑问或建议: 1. 查看现有文档 2. 查看示例报告 3. 使用 `--verbose` 启用详细日志记录 4. 检查 `port_scanner.log` 以获取详细的错误信息 ## 🌟 致谢 本项目旨在展示专业的 Python 开发实践和网络安全基础知识,供教育用途使用。 **版本:** 1.0.0 **最后更新:** 2024-06-09 **作者:** Cybersecurity Portfolio Project
标签:Banner抓取, Python, TCP/IP, 插件系统, 数据统计, 无后门, 服务器安全, 端口扫描, 网络安全, 网络工具, 逆向工具, 隐私保护