SIREN

通信协议

了解 SIREN 的客户端-服务端通信协议

开发参考

本页面主要面向开发者,介绍 SIREN 客户端与服务端之间的通信协议细节。

标准消息

internal/protocol/protocol.go
type Header struct {
	MsgType uint8
	DataLen uint64
}

type Message struct {
	Header Header
	Data   []byte
}

即:1 字节消息类型 | 8 字节消息长度 | 消息内容

客户端连接建立后的第一帧必须是 MsgClientHello,其中包含稳定 agentId、客户端 OS 和当前插件列表。服务端基于该帧注册客户端、恢复备注,并初始化插件显示;后续插件安装、卸载、更新或启停变化仍通过 MsgPluginRegister 刷新完整插件列表。

Raw 消息

顾名思义,Raw 消息无固定格式,客户端发送消息至服务端后,如果消息的首字节不在标准消息类型标识范围内则被视为 Raw 消息,读取至 \n 并直接打印,随后切换回读取标准消息的模式。

主要适用于客户端日志直传场景。

各命令交互流程

以下时序图展示了各命令在客户端与服务端之间的交互过程。

recon

远程 reconupload 都采用“命令响应帧 + MsgFile 内容帧”的边界。服务端会校验第二帧必须是 MsgFile;如果收到其他消息类型,会关闭当前连接,避免把错误帧继续当作协议流解析。

shell

run

upload

info

plugins install

plugin invoke (command type)

plugin invoke (recon type)

fwd / stopfwd

clean

On this page