Skip to content

远程控制系统设计文档

模块概述

版本: v0.33.0 状态: 100% 完成 最后更新: 2026-02-11

远程控制系统提供从 Android 设备通过 P2P 网络远程控制桌面端的完整能力。系统采用 DID 身份验证、权限分级控制、端到端加密通信,支持 23 种命令类型和浏览器扩展自动化。

核心特性

  • P2P 远程连接: 基于 WebRTC 的点对点加密通信
  • DID 身份验证: 去中心化身份认证,无需中心服务器
  • 权限分级控制: 5 级权限模型 (NONE → FULL)
  • 23 个命令处理器: 覆盖系统控制、文件传输、浏览器自动化等
  • 浏览器扩展: Chrome/Firefox 扩展实现深度网页自动化
  • 审计日志: 完整的操作记录和审计追踪

1. 系统架构

1.1 整体架构图

┌──────────────────────────────────────────────────────────────────┐
│                        Android 远程控制端                          │
├──────────────────────────────────────────────────────────────────┤
│  RemoteControlScreen │ ProcessManager │ PowerControl │ ...       │
│         ↓                   ↓               ↓                    │
│  RemoteCommandClient ─── P2P WebRTC ─── DID 签名认证              │
└──────────────────────────────────────────────────────────────────┘
                              ↕ P2P 加密通道
┌──────────────────────────────────────────────────────────────────┐
│                        PC 远程网关层                               │
├──────────────────────────────────────────────────────────────────┤
│                      RemoteGateway                                │
│     ┌─────────────────────────────────────────────────────┐      │
│     │  P2PCommandAdapter  │  PermissionGate  │  CommandRouter    │
│     └─────────────────────────────────────────────────────┘      │
│                              ↓                                    │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │                    23 Command Handlers                      │  │
│  ├────────────────────────────────────────────────────────────┤  │
│  │ AI      │ System   │ File     │ Desktop  │ Knowledge       │  │
│  │ History │ Device   │ Clipboard│ Notify   │ Workflow        │  │
│  │ Browser │ Power    │ Process  │ Media    │ Network         │  │
│  │ Storage │ Display  │ Input    │ App      │ SysInfo         │  │
│  │ Security│ UserBrowser │ Extension                          │  │
│  └────────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────────────┐
│                      浏览器扩展层                                  │
├──────────────────────────────────────────────────────────────────┤
│  BrowserExtensionServer ←→ Native Host ←→ Chrome/Firefox 扩展    │
└──────────────────────────────────────────────────────────────────┘

1.2 核心组件

组件文件行数说明
RemoteGatewayremote-gateway.js~740统一的远程命令处理入口
P2PCommandAdapterp2p-command-adapter.js~500P2P 命令适配器
PermissionGatepermission-gate.js~600权限验证和审计
CommandRoutercommand-router.js~300命令路由和分发
BrowserExtensionServerbrowser-extension-server.js~400浏览器扩展通信服务器

2. 权限系统

2.1 权限等级

javascript
const PERMISSION_LEVELS = {
  NONE: 0, // 无权限 - 仅设备发现
  VIEW: 1, // 只读 - 查看系统信息、文件列表
  CONTROL: 2, // 控制 - 媒体控制、剪贴板同步
  MANAGE: 3, // 管理 - 进程管理、应用控制
  FULL: 4, // 完全 - 所有操作包括电源控制
};

2.2 命令权限映射

命令类别所需权限示例命令
系统信息VIEWsysinfo.getCpuUsage, network.getInfo
文件查看VIEWfile.list, file.getInfo
媒体控制CONTROLmedia.play, media.pause
剪贴板CONTROLclipboard.get, clipboard.set
进程管理MANAGEprocess.list, process.kill
应用控制MANAGEapp.launch, app.close
电源控制FULLpower.shutdown, power.reboot
安全操作FULLsecurity.lock, security.logout

2.3 权限验证流程

1. 接收命令请求

2. 验证 DID 签名

3. 检查 Nonce 防重放

4. 查询设备权限等级

5. 比较命令所需权限

6. 通过 → 执行命令
   拒绝 → 返回权限错误

3. 命令处理器详解

3.1 处理器列表

#处理器注册名主要功能
1AICommandHandleraiAI 对话、RAG 搜索、Agent 控制
2SystemCommandHandlersystem系统操作、截图、窗口控制
3FileTransferHandlerfile文件上传、下载、同步
4RemoteDesktopHandlerdesktop远程桌面流、输入控制
5KnowledgeHandlerknowledge知识库搜索、笔记操作
6CommandHistoryHandlerhistory命令历史记录和查询
7DeviceManagerHandlerdevice设备注册、状态管理
8ClipboardHandlerclipboard剪贴板同步
9NotificationHandlernotification通知推送和同步
10WorkflowHandlerworkflow工作流自动化执行
11BrowserHandlerbrowserPuppeteer 浏览器自动化
12PowerHandlerpower电源控制 (休眠/关机/重启)
13ProcessHandlerprocess进程列表、启动、终止
14MediaHandlermedia媒体播放控制
15NetworkHandlernetwork网络信息和诊断
16StorageHandlerstorage存储信息和磁盘操作
17DisplayHandlerdisplay显示器信息和设置
18InputHandlerinput键盘鼠标模拟输入
19ApplicationHandlerapp应用程序启动和管理
20SystemInfoHandlersysinfo系统信息收集
21SecurityHandlersecurity安全操作 (锁屏/登出)
22UserBrowserHandleruserBrowser用户浏览器 CDP 控制
23ExtensionBrowserHandlerextension浏览器扩展通信

3.2 命令格式 (JSON-RPC 2.0)

请求格式:

json
{
  "jsonrpc": "2.0",
  "id": "unique-request-id",
  "method": "handler.action",
  "params": { ... },
  "auth": {
    "did": "did:key:z...",
    "signature": "base64-signature",
    "timestamp": 1707667200000,
    "nonce": "random-nonce"
  }
}

响应格式:

json
{
  "jsonrpc": "2.0",
  "id": "unique-request-id",
  "result": { ... }
}

错误响应:

json
{
  "jsonrpc": "2.0",
  "id": "unique-request-id",
  "error": {
    "code": -32001,
    "message": "Permission Denied",
    "data": "Insufficient permission level"
  }
}

4. 浏览器扩展系统

4.1 架构

┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│  扩展 Popup.js  │ ←──→ │ Background.js   │ ←──→ │  Content.js     │
│  用户界面       │      │ 后台服务        │      │  页面注入       │
└─────────────────┘      └─────────────────┘      └─────────────────┘

                    Native Messaging Protocol

                    ┌─────────────────────────┐
                    │ BrowserExtensionServer  │
                    │ (WebSocket on 18790)    │
                    └─────────────────────────┘

4.2 支持的浏览器命令

命令说明
extension.navigate导航到指定 URL
extension.click点击页面元素
extension.type输入文本
extension.screenshot获取页面截图
extension.executeScript执行 JavaScript
extension.getTabs获取标签页列表
extension.closeTab关闭标签页
extension.getPageContent获取页面内容
extension.extractData提取页面数据
extension.fillForm自动填充表单

4.3 扩展文件结构

browser-extension/
├── manifest.json       # 扩展清单 (MV3)
├── background.js       # 服务工作者
├── content.js          # 内容脚本
├── popup.html          # 弹出界面
├── popup.js            # 弹出逻辑
└── icons/              # 扩展图标

5. Android 端实现

5.1 UI 组件

界面文件功能
RemoteControlScreenRemoteControlScreen.kt主控制面板
PowerControlScreenPowerControlScreen.kt电源控制
ProcessManagerScreenProcessManagerScreen.kt进程管理
MediaControlScreenMediaControlScreen.kt媒体控制
InputControlScreenInputControlScreen.kt输入控制
StorageInfoScreenStorageInfoScreen.kt存储信息
NetworkInfoScreenNetworkInfoScreen.kt网络信息
ApplicationManagerScreenApplicationManagerScreen.kt应用管理
SecurityInfoScreenSecurityInfoScreen.kt安全信息
RemoteDesktopScreenRemoteDesktopScreen.kt远程桌面
FileTransferScreenFileTransferScreen.kt文件传输
ClipboardSyncScreenClipboardSyncScreen.kt剪贴板同步

5.2 命令客户端

kotlin
class RemoteCommandClient(
    private val p2pClient: P2PClient,
    private val didSigner: DIDSigner
) {
    suspend fun sendCommand(
        method: String,
        params: Map<String, Any>,
        targetDid: String
    ): CommandResponse {
        val auth = AuthPayload(
            did = didSigner.getDid(),
            signature = didSigner.sign(params),
            timestamp = System.currentTimeMillis(),
            nonce = generateNonce()
        )

        val request = CommandRequest(
            jsonrpc = "2.0",
            id = UUID.randomUUID().toString(),
            method = method,
            params = params,
            auth = auth
        )

        return p2pClient.send(targetDid, request)
    }
}

6. 安全机制

6.1 认证流程

  1. DID 签名验证: 每个命令必须携带 DID 签名
  2. 时间戳检查: 防止过期命令重放 (5分钟窗口)
  3. Nonce 唯一性: 每个 Nonce 只能使用一次
  4. 权限验证: 检查设备权限等级

6.2 审计日志

javascript
// 审计日志结构
{
  id: "audit-uuid",
  timestamp: 1707667200000,
  did: "did:key:z...",
  peerId: "peer-id",
  method: "power.shutdown",
  params: { ... },
  result: "success" | "denied" | "error",
  reason: "Permission level insufficient",
  ip: "192.168.1.100"
}

6.3 敏感操作确认

对于高危操作 (如 power.shutdown),系统会:

  1. 在 PC 端弹出确认对话框
  2. 记录详细审计日志
  3. 发送通知到所有已连接设备

7. 性能指标

指标目标值实际值
命令响应延迟<100ms~50ms
P2P 连接建立<3s~2s
权限验证耗时<10ms~5ms
并发命令处理100/s150/s
命令成功率>99%99.5%

8. 配置选项

javascript
// remote-gateway 配置
{
  enableP2P: true,           // 启用 P2P 通信
  enableWebSocket: true,     // 启用 WebSocket 扩展通信
  wsPort: 18789,             // WebSocket 端口
  wsHost: "127.0.0.1",       // WebSocket 主机

  permission: {
    defaultLevel: "VIEW",    // 新设备默认权限
    requireConfirmation: ["power.shutdown", "power.reboot"],
    auditRetentionDays: 30
  },

  fileTransfer: {
    maxFileSize: 100 * 1024 * 1024,  // 100MB
    chunkSize: 64 * 1024,            // 64KB
    allowedExtensions: ["*"]
  },

  browserExtension: {
    port: 18790,
    allowedOrigins: ["chrome-extension://...", "moz-extension://..."]
  }
}

9. 文件结构

desktop-app-vue/src/main/remote/
├── index.js                      # 模块入口
├── remote-gateway.js             # 远程网关
├── remote-ipc.js                 # IPC 处理器
├── p2p-command-adapter.js        # P2P 命令适配器
├── permission-gate.js            # 权限控制
├── command-router.js             # 命令路由
├── browser-extension-server.js   # 浏览器扩展服务器
├── browser-extension/            # 浏览器扩展文件
│   ├── manifest.json
│   ├── background.js
│   ├── content.js
│   ├── popup.html
│   └── popup.js
├── handlers/                     # 命令处理器 (23个)
│   ├── ai-handler.js
│   ├── system-handler.js
│   ├── file-transfer-handler.js
│   ├── remote-desktop-handler.js
│   ├── knowledge-handler.js
│   ├── command-history-handler.js
│   ├── device-manager-handler.js
│   ├── clipboard-handler.js
│   ├── notification-handler.js
│   ├── workflow-handler.js
│   ├── browser-handler.js
│   ├── power-handler.js
│   ├── process-handler.js
│   ├── media-handler.js
│   ├── network-handler.js
│   ├── storage-handler.js
│   ├── display-handler.js
│   ├── input-handler.js
│   ├── application-handler.js
│   ├── system-info-handler.js
│   ├── security-handler.js
│   └── user-browser-handler.js
├── logging/                      # 日志系统
│   ├── command-logger.js
│   ├── batched-command-logger.js
│   └── statistics-collector.js
└── workflow/                     # 工作流引擎
    └── workflow-engine.js

10. 使用示例

10.1 初始化远程网关

javascript
const { createRemoteGateway } = require("./remote");

const gateway = await createRemoteGateway(
  {
    p2pManager,
    didManager,
    ukeyManager,
    database,
    mainWindow,
    aiEngine,
    ragManager,
  },
  {
    enableP2P: true,
    permission: {
      defaultLevel: "VIEW",
    },
  },
);

// 监听事件
gateway.on("device:connected", (peerId) => {
  console.log("设备已连接:", peerId);
});

gateway.on("command:completed", ({ method, success, duration }) => {
  console.log(
    `命令 ${method} ${success ? "成功" : "失败"}, 耗时 ${duration}ms`,
  );
});

10.2 Android 端发送命令

kotlin
// 获取系统信息
val result = remoteCommandClient.sendCommand(
    method = "sysinfo.getCpuUsage",
    params = emptyMap(),
    targetDid = desktopDid
)

// 控制媒体播放
remoteCommandClient.sendCommand(
    method = "media.pause",
    params = mapOf("player" to "spotify"),
    targetDid = desktopDid
)

// 终止进程
remoteCommandClient.sendCommand(
    method = "process.kill",
    params = mapOf("pid" to 12345),
    targetDid = desktopDid
)

11. 相关文档


文档版本: 1.0 最后更新: 2026-02-11

ChainlessChain 系统设计文档 — 面向开发者