You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决REST API调用Azure容器实例执行命令的WebSocket问题

解决Azure容器实例(ACI)WebSocket执行命令的协议与回显问题

ACI WebSocket执行命令的核心协议细节

ACI的WebSocket执行命令服务采用自定义二进制帧协议,官方文档未明确说明具体格式,但实际交互必须遵循以下规则:

  • 发送的每一条消息(密码、命令)都需要封装为「4字节大端序长度前缀 + UTF-8编码的内容」的二进制包
  • 服务端返回的响应同样遵循该格式,必须先解析长度前缀,再读取对应长度的内容才能得到可读文本

解决密码验证与命令回显问题

你遇到的十六进制>和二进制回显,本质是未正确解析服务端的二进制响应帧:

  1. 发送密码时,必须按上述二进制格式封装后发送,不能直接传文本
  2. 收到服务端响应时,先读取前4字节解析出内容长度,再截取后续对应长度的字节转成UTF-8字符串,就能得到正常的>提示符或命令输出

执行rcon-cli的正确流程

  1. 建立WebSocket连接到获取的WSS URL
  2. 按二进制协议格式发送密码,等待解析出的响应中出现>提示符,说明验证成功
  3. 同样用二进制帧格式发送rcon-cli命令,解析返回内容即可进入目标shell交互

代码实现示例(Node.js)

const WebSocket = require('ws');
const { Buffer } = require('buffer');

// 封装消息为ACI要求的二进制格式
function wrapMessage(content) {
  const contentBuffer = Buffer.from(content, 'utf8');
  const lengthBuffer = Buffer.alloc(4);
  lengthBuffer.writeUInt32BE(contentBuffer.length, 0);
  return Buffer.concat([lengthBuffer, contentBuffer]);
}

// 初始化WebSocket连接
const ws = new WebSocket('你的WSS URL');

ws.on('open', () => {
  // 发送验证密码
  ws.send(wrapMessage('你的密码'));
});

ws.on('message', (data) => {
  // 解析服务端响应
  const contentLength = data.readUInt32BE(0);
  const content = data.slice(4, 4 + contentLength).toString('utf8');
  console.log('输出:', content);

  // 验证成功后发送rcon-cli命令
  if (content.includes('>')) {
    ws.send(wrapMessage('rcon-cli'));
  }
});

Postman调试说明

Postman的WebSocket工具对自定义二进制协议支持有限,容易出现无响应或格式错误,建议用代码实现协议解析,避免工具限制。

内容的提问来源于stack exchange,提问作者blockarchitech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:37:14