# remote_control **Repository Path**: uefva/remote_control ## Basic Information - **Project Name**: remote_control - **Description**: 使用C++以及qt实现的远程控制程序,u盘后插入后即可通过远程主机实现实时的控制以及文件上传下载执行等操作。目前正在开发中 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-15 - **Last Updated**: 2025-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # remote_control ## 介绍 使用C++以及qt实现的远程控制程序,插入u盘或者打开软件后即可通过远程主机实现实时的控制以及文件上传下载执行等操作。目前正在开发中 ## 软件设计 软件分为被控端、控制端和服务器端; ### 1、被控端(Linux,Windows,Mac) 1. 检查网络状态,与服务器建立连接。 2. 获取本机主板的UUID和系统的GUID唯一标识码交给服务器。 3. 定时一分钟以及刚启动软件时发送心跳包给服务器更新状态。 4. 守护进程挂入后台。 5. 实现指定路径模糊搜索文件(广度搜索遍历)。 6. 采用多线程实现文件传输。 7. 线程一:与控制端直接建立连接,实现模拟终端。 8. 线程二:检查CPU、内存等状态判断是否进入阻塞态,防止占用过多系统资源。 ### 2、服务器端(Linux) 1. 实时的监控多个被控端的电脑信息,获取上下线状态,如果上线控制端可以直接建立连接。 2. 暂存需要的被控端电脑文件,等待控制端从服务器下载。 3. 将从被控端获取到的一系列信息存入数据库、用UUID码作为主键。 4. 线程一:获取控制端的文件上传下载信号,实现文件的上传下载。 ### 3、控制端(QT) 1. qt实现图形化终端界面。 2. 查看全部被控端状态信息(UUID、上下线、备注名。。) 3. 通过服务器远程终止被控端运行的程序以及删除。 4. 方式一:获取到的被控端文件路径,用类Windows的图形化方式展示。 5. 方式二:模拟CMD命令行的方式实时控制。 6. 文件上传、下载、删除和执行。 ### 4、数据库设计 1. xxxx ### 5、其他 1. 免杀 2. 提权 ## 实现思路 ​ 由于主要操作集中在被控端,服务器和控制端都基于被控端的数据进行操作,所以要先实现被控端大致功能。本人目前的技术栈只会Linux系统编程,所以先完成Linux下的**接口实现**(同时预留Windows的宏定义)。然后完成服务器端的**接口实现**,以能够将被控端的数据交给服务器存入数据库为准。之后可以考虑实现控制端的**客户端开发**。 ### 1、定义三端的接口 ​ 由于被控端需要支持跨平台,所以需要适配不同的操作系统,因此需要定义三种主流操作系统的代码。 文件操作接口实例: ```c++ // 文件操作接口定义 class FileSystem { public: virtual bool readFile(const std::string& filename, std::string& content) = 0; virtual bool writeFile(const std::string& filename, const std::string& content) = 0; // 其他文件操作函数... }; // Windows文件系统实现 #ifdef _WIN32 class WindowsFileSystem : public FileSystem { public: bool readFile(const std::string& filename, std::string& content) override { // Windows文件读取实现 } bool writeFile(const std::string& filename, const std::string& content) override { // Windows文件写入实现 } // 其他Windows文件操作实现... }; #endif // Linux文件系统实现 #ifdef __linux__ class LinuxFileSystem : public FileSystem { public: bool readFile(const std::string& filename, std::string& content) override { // Linux文件读取实现 } bool writeFile(const std::string& filename, const std::string& content) override { // Linux文件写入实现 } // 其他Linux文件操作实现... }; #endif // 主程序 int main() { // 根据平台选择文件系统对象 #ifdef _WIN32 WindowsFileSystem fileSystem; #elif __linux__ LinuxFileSystem fileSystem; #endif // 使用文件系统对象进行文件操作 std::string content; fileSystem.readFile("test.txt", content); fileSystem.writeFile("output.txt", "Hello, world!"); return 0; } ``` ### 2、控制端远程cd切换目录 1. 用文件子进程,主进程调用cd [目录]切换,主进检查远端发送过来的命令,并执行; ## 安装教程 1. xxxx 2. xxxx 3. xxxx ## 使用说明 1. xxxx 2. xxxx 3. xxxx ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request 6. https://gitee.com/gitee-stars/)