所有请求均为POST
。
每次请求都必须在Header中带上Authorization
。
Authorization
请求头格式:Basic <token>
(basic auth)。
Authorization: Basic <base64('username:password')>
例如:
Authorization: Basic WFpCOjEyNDg=
在最初的Basic Authentication之后,服务端会分配一个Authorization
的Cookie。
该Cookie可用于请求的后续鉴权,可以不再附带Authorization头。
所有响应均是JSON格式。
code
有三种结果,分别为-1
,0
和1
,含义如下。
code | meaning |
---|---|
-1 | 参数缺失或无效 |
0 | 成功 |
1 | 失败,并输出错误信息 |
{
"code": -1,
"msg": "${i18n|COMMON.INVALID_PARAMETER}"
}
{
"code": 0,
"data": {
...
}
}
{
"code": 1,
"msg": "${i18n|COMMON.DEVICE_NOT_EXIST}"
}
参数:无
设备的id
是一串64位的字符串,每台设备独一无二,一般不会变化。
识别设备主要靠这个。下文中提到的设备ID也指的是这个。
每个device对象所对应的key,是它的本次连接的连接ID。
连接ID是随机、临时的,每次重连就会变化,不建议使用。
{
"code": 0,
"data": {
"1de601ca-7738-4b77-a081-57d3fc9c4482": {
"id": "1a23e7660cde01285ca241d5f5d3cf2c5bc39e02c1df7a30b58fbde2938b0375",
"os": "windows",
"arch": "amd64",
"lan": "192.168.1.1",
"wan": "1.1.1.1",
"mac": "00:00:00:00:00:00",
"net": {
"sent": 0,
"recv": 60
},
"cpu": {
"model": "Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz",
"usage": 8.658854166666668,
"cores": {
"logical": 8,
"physical": 4
}
},
"ram": {
"total": 8432967680,
"used": 5109829632,
"usage": 60.593492420452385
},
"disk": {
"total": 1373932810240,
"used": 185675567104,
"usage": 13.51416646579435
},
"uptime": 1015,
"latency": 10,
"hostname": "LOCALHOST",
"username": "EXAMPLE"
}
}
}
参数::act
以及 device
(设备ID)
参数 :act
可以是这些: lock
,logoff
,hibernate
,suspend
,restart
,shutdown
以及 offline
。
例如,如果你调用 /device/restart
,那对应设备就会重启。
{
"code": 0
}
参数:cmd
、args
以及device
(设备ID)
示例:
POST http://localhost:8000/api/device/exec HTTP/1.1
Host: localhost:8000
Content-Length: 116
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.47
Origin: http://localhost:8000
Referer: http://localhost:8000/
cmd=taskkill&args=%2Ff%20%2Fim%20regedit.exe&device=bc7e49f8f794f80ffb0032a4ba516c86d76041bf2023e1be6c5dda3b1ee0cf4c
{
"code": 0
}
参数:device
(设备ID)
如果截屏获取成功,则会直接以图片的形式输出。
如果截屏失败,如下响应会被输出(错误信息不唯一)。
{
"code": 1,
"msg": "${i18n|DESKTOP.NO_DISPLAY_FOUND}"
}
参数:files
(文件数组) 以及 device
(设备ID)
如果文件存在且可访问,则文件会直接输出。
否则,会给出错误原因。
如果files
为文件数组或者目录,则会输出一个zip文件。
{
"code": 1,
"msg": "${i18n|EXPLORER.FILE_OR_DIR_NOT_EXIST}"
}
参数:files
(文件数组) 以及 device
(设备ID)
如果文件存在且被成功删除,则code
为0
。
{
"code": 0
}
{
"code": 1,
"msg": "${i18n|EXPLORER.FILE_OR_DIR_NOT_EXIST}"
}
GET参数:file
(文件名)、path
(路径)和device
(设备ID)
文件内容需要作为请求体body发送。
请求体body中的任何内容都会被写到指定地文件中。
如果存在同名文件,则会被覆盖!
示例:
POST http://localhost:8000/api/device/file/upload?path=D%3A%5C&file=Test.txt&device=bc7e49f8f794f80ffb0032a4ba516c86d76041bf2023e1be6c5dda3b1ee0cf4c HTTP/1.1
Host: localhost:8000
Content-Length: 12
Content-Type: application/octet-stream
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.47
Origin: http://localhost:8000
Referer: http://localhost:8000/
Hello World.
如果文件上传成功,则code
为0
。
文件D:\Test.txt
会写入:Hello World.
。
{
"code": 0
}
{
"code": 1,
"msg": "${i18n|EXPLORER.FILE_OR_DIR_NOT_EXIST}"
}
参数:path
(父目录路径) 以及 device
(设备ID)
如果path
为空,windows下会给出磁盘列表。
其它系统会默认输出/
目录下的文件和目录。
type
有三种结果:0
代表文件,1
代表目录,2
代表磁盘(windows)。
{
"code": 0,
"data": {
"files": [
{
"name": "home",
"size": 4096,
"time": 1629627926,
"type": 1
},
{
"name": "Spark",
"size": 8192,
"time": 1629627926,
"type": 0
}
]
}
}
{
"code": 1,
"msg": "${i18n|EXPLORER.FILE_OR_DIR_NOT_EXIST}"
}
参数:device
(设备ID)
{
"code": 0,
"data": {
"processes": [
{
"name": "[System Process]",
"pid": 0
},
{
"name": "System",
"pid": 4
},
{
"name": "Registry",
"pid": 124
},
{
"name": "smss.exe",
"pid": 392
},
{
"name": "winlogon.exe",
"pid": 456
}
]
}
}
参数:pid
以及 device
(设备ID)
{
"code": 0
}
{
"code": 1,
"msg": "${i18n|COMMON.DEVICE_NOT_EXIST}"
}