# SocketEraser **Repository Path**: wuli_test/socket-eraser ## Basic Information - **Project Name**: SocketEraser - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-08 - **Last Updated**: 2026-05-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Socket Eraser 服务器 基于 Qt5.6、C++11、libzmq 和 Protocol Buffers 的磁盘擦除服务器应用程序。 ## 功能特性 - **多客户端支持**: 支持同时连接多个客户端 - **实时监控**: 实时显示客户端连接状态、磁盘信息和擦除进度 - **Protobuf通信**: 使用 Protocol Buffers 进行高效的消息序列化 - **ZMQ通信**: 基于 ZeroMQ 的可靠消息传递 - **GUI界面**: 直观的 Qt 图形用户界面 - **演示客户端**: 包含完整的演示客户端用于测试 ## 系统架构 ### 消息协议 使用 Protocol Buffers 定义的消息格式: - **客户端注册** (CLIENT_REGISTER) - **磁盘信息** (DISK_INFO) - **擦除开始** (ERASURE_START) - **擦除进度** (ERASURE_PROGRESS) - **擦除完成** (ERASURE_COMPLETE) - **心跳** (HEARTBEAT) - **客户端断开** (CLIENT_DISCONNECT) ### 主要组件 - **MainWindow**: 主界面,包含所有GUI组件 - **ZMQServer**: ZMQ服务器,处理客户端连接和消息 - **ClientManager**: 客户端状态管理 - **MessageHandler**: 消息序列化/反序列化和演示数据生成 - **DemoClient**: 演示客户端,用于测试服务器功能 ## 依赖项 - Qt5.6 或更高版本 (Core, Widgets, Network) - Protocol Buffers (libprotobuf) - ZeroMQ (libzmq) - qmake (Qt 构建工具) - C++11 兼容编译器 ## 编译和安装 ### Ubuntu/Debian ```bash # 安装依赖项 sudo apt-get update sudo apt-get install qt5-default qt5-qmake libprotobuf-dev protobuf-compiler libzmq3-dev build-essential # 使用构建脚本 chmod +x build_qt.sh ./build_qt.sh # 或手动构建 protoc --cpp_out=. messages.proto mkdir build_server cd build_server qmake ../server.pro CONFIG+=release make -j$(nproc) ./bin/SocketEraserServer ``` ### Windows ```cmd # 使用构建脚本 build_qt.bat # 或手动构建 protoc --cpp_out=. messages.proto mkdir build_server cd build_server qmake ..\server.pro CONFIG+=release nmake bin\SocketEraserServer.exe ``` ### macOS ```bash # 安装依赖项 brew install qt5 protobuf zeromq # 使用构建脚本 ./build_qt.sh # 或手动构建 protoc --cpp_out=. messages.proto mkdir build_server cd build_server qmake ../server.pro CONFIG+=release make ./bin/SocketEraserServer ``` ## 快速开始 ### 使用构建脚本 **Linux/macOS:** ```bash chmod +x build_qt.sh ./build_qt.sh ``` **Windows:** ```cmd build_qt.bat ``` ### 启动服务器 1. 编译项目后运行服务器程序 2. 点击"启动服务器"按钮开始监听客户端连接 3. 服务器默认监听端口:5555 ### 运行测试 ```bash cd build ./bin/test_server ``` 这将启动服务器并创建3个演示客户端进行测试。 ## 使用说明 ### 服务器界面 **主界面布局:** - **左侧**: 客户端列表和控制按钮 - **右上**: 详细信息标签页(客户端信息、磁盘信息、擦除信息) - **右下**: 系统日志 **功能按钮:** - **启动服务器**: 开始监听客户端连接 - **停止服务器**: 停止服务器并断开所有客户端 - **刷新**: 更新客户端列表 - **清空日志**: 清空系统日志显示 - **导出日志**: 将日志保存到文件 ### 客户端连接 客户端连接后会自动: - 发送注册信息(客户端ID、主机名、IP地址、操作系统信息) - 定期发送心跳(30秒间隔) - 发送磁盘信息(磁盘型号、容量、健康状态等) - 报告擦除进度和状态 ### 详细信息标签页 **客户端信息:** - 显示选中客户端的详细信息 - 包括连接时间、最后心跳时间、操作系统版本等 **磁盘信息:** - 显示客户端的所有磁盘 - 支持按客户端过滤 - 显示磁盘健康状态(颜色编码) - 显示磁盘容量、文件系统、挂载点等 **擦除信息:** - 显示所有擦除任务 - 实时进度条显示 - 支持按客户端和状态过滤 - 显示擦除方法、遍数、验证状态等 ## 演示客户端 项目包含一个完整的演示客户端,可以模拟真实的客户端行为: ### 功能特性 - 自动注册到服务器 - 随机生成磁盘信息 - 模拟擦除过程 - 定期发送心跳 - 支持多种擦除方法 ### 使用方法 ```cpp // 创建演示客户端 DemoClient* client = new DemoClient("DEMO_CLIENT_001", "tcp://localhost:5555"); client->start(); // 客户端会自动: // 1. 注册到服务器 // 2. 发送磁盘信息 // 3. 模拟擦除过程 // 4. 定期发送心跳 ``` ### 演示数据 **磁盘信息:** - 随机生成2-4个磁盘 - 支持SATA、NVMe、USB、SAS接口 - 容量范围:100GB - 4TB - 健康状态:60-100分 **擦除信息:** - 支持Quick、DoD 5220.22-M、Gutmann、Zero Fill方法 - 擦除进度:0-100% - 验证状态:成功/失败 ## 消息格式 ### 磁盘信息消息 ```protobuf message DiskInfo { string disk_id = 1; // 磁盘标识 string model = 2; // 磁盘型号 string serial_number = 3; // 序列号 string interface_type = 4; // 接口类型 int64 total_size = 5; // 总容量(字节) int64 used_size = 6; // 已用容量(字节) int64 free_size = 7; // 可用容量(字节) string file_system = 8; // 文件系统类型 bool is_system_disk = 9; // 是否系统盘 bool is_removable = 10; // 是否可移动磁盘 string mount_point = 11; // 挂载点 double health_status = 12; // 健康状态 (0-100) } ``` ### 擦除信息消息 ```protobuf message ErasureInfo { string disk_id = 1; // 要擦除的磁盘ID string erasure_method = 2; // 擦除方法 int32 pass_count = 3; // 擦除遍数 int64 total_bytes = 4; // 总字节数 int64 erased_bytes = 5; // 已擦除字节数 double progress_percent = 6; // 进度百分比 int64 start_time = 7; // 开始时间戳 int64 estimated_end_time = 8; // 预计结束时间 string status = 9; // 状态 string error_message = 10; // 错误信息 bool verification_enabled = 11; // 是否启用验证 bool verification_passed = 12; // 验证是否通过 } ``` ## 配置选项 ### 服务器配置 - **监听地址**: 可在启动时指定(默认:tcp://*:5555) - **心跳间隔**: 30秒 - **客户端超时**: 60秒 - **消息处理间隔**: 10ms ### 客户端配置 - **消息发送间隔**: 5秒 - **心跳间隔**: 10秒 - **擦除进度更新间隔**: 2秒 - **连接超时**: 5秒 ## 故障排除 ### 常见问题 1. **编译错误**: 确保所有依赖项已正确安装 2. **连接失败**: 检查防火墙设置和端口占用 3. **消息丢失**: 检查ZMQ socket配置和网络连接 4. **序列化错误**: 确保客户端和服务器使用相同版本的protobuf文件 ### 调试模式 编译时启用调试模式: ```bash qmake CONFIG+=debug make ``` ### 日志级别 应用程序会在控制台输出详细的调试信息,包括: - 客户端连接/断开事件 - 消息接收/发送状态 - 错误和异常信息 ### 端口占用检查 **Linux/macOS:** ```bash netstat -tlnp | grep 5555 ``` **Windows:** ```cmd netstat -an | findstr 5555 ``` ## 扩展开发 ### 添加新的消息类型 1. 在 `messages.proto` 中定义新的消息类型 2. 重新生成protobuf文件: ```bash protoc --cpp_out=. messages.proto ``` 3. 在 `MessageHandler` 中添加序列化/反序列化方法 4. 在 `ZMQServer` 中添加消息处理逻辑 ### 自定义GUI组件 所有GUI组件都是模块化的,可以轻松扩展: - 继承现有的Widget类 - 重写绘制和事件处理方法 - 添加新的信号和槽 ### 数据持久化 可以添加数据库支持来持久化客户端和擦除信息: - SQLite 用于本地存储 - MySQL/PostgreSQL 用于服务器部署 ### 添加新的擦除方法 1. 在 `MessageHandler::generateDemoErasureInfo()` 中添加新方法 2. 更新GUI中的擦除方法显示 3. 添加相应的验证逻辑 ## 性能优化 ### 服务器端 - 使用连接池管理ZMQ连接 - 实现消息队列缓冲 - 添加负载均衡支持 ### 客户端端 - 优化消息发送频率 - 实现批量消息处理 - 添加本地缓存机制 ## 安全考虑 - 实现客户端认证机制 - 添加消息加密支持 - 设置访问控制列表 - 记录审计日志 ## 许可证 本项目采用 MIT 许可证。详见 LICENSE 文件。 ## 技术支持 如有问题或建议,请通过以下方式联系: - 提交 Issue - 发送邮件 - 创建 Pull Request ## 更新日志 ### v1.0.0 - 初始版本发布 - 支持多客户端连接 - 实现磁盘信息监控 - 支持擦除进度跟踪 - 包含完整的演示系统