X11协议中String8(ListOfCARD8)的长度

问题描述 投票:0回答:2

我正在开发 X11 的代理服务器,它还会对某些数据进行一些轻微的数据操作(颜色深度、水印等等)。我已经建立并运行了连接,并且正在操作 177/UDP 连接中的服务器 IP,以便客户端通过代理正确连接,而不是调用服务器。换句话说,我有一个功能齐全的代理,可以通过端口 6000 将数据从客户端代理到服务器。

我现在尝试做的是解析数据流并找到每条消息的开头和类型,以清除我将要从需要操作的数据中传递的数据。然而,我很早就遇到了障碍。

我从客户端获得的数据是带有字节顺序的单个字节(在我的例子中为“B”,但我让它支持两者),后跟主要版本(3)的 2 个字节和用于主版本(3)的 2 个字节次要版本(11)。这两者在协议规范中都被指定为 CARD16 (https://www.rfc-editor.org/rfc/rfc1013)。 接下来是 AuthorizationName,表示要使用的授权类型,类型为 STRING8。 STRING8 在文档中被指定为 LISTOFCARD8,表示 8 位无符号整数的列表。

问题就在这里:我根本不知道 LISTOFCARD8 有多长。 规范中的片段:“长度字段的大小可能会有所不同(它不是 必须与 FOO 大小相同),在某些情况下可能是隐式的, 并且本文件中未详细说明。”。

我得到的实际数据,从数据流中的字节 5 开始,是 0 0 12 0 10 0 0,然后是实际数据流(ASCII 字符串“MIT-MAGIC-COOKIE-1”)。我无法从它前面的字节中找出有效的字符串长度,并且字符串本身似乎不是以 null 结尾的。

所以,对于我的问题,如果还没有遇到过:我如何确定 ListOfFOO 的长度,或者更具体地说是 ListOfCARD8,如 RFC 1013 中规定的?

谢谢! // 埃里克·约翰逊

x11 protocols
2个回答
1
投票

RFC 1013 是 X11 协议规范的一个从未使用过、长期过时的预发布版本,应在阅读前烧录并且从未使用过。

当前正确的 X11 协议规范可以在 http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.htmlhttp://www.x.org/releases/ 找到X11R7.7/doc/xproto/x11protocol.pdf


0
投票

这在 X Window 系统协议,附录 B“协议编码”,“连接设置”部分中指定。

摘录如下:

     1                       byte-order
          #x42     MSB first
          #x6C     LSB first
     1                       unused
     2     CARD16            protocol-major-version
     2     CARD16            protocol-minor-version
     2     n                 length of authorization-protocol-name
     2     d                 length of authorization-protocol-data
     2                       unused
     n     STRING8           authorization-protocol-name
     p                       unused, p=pad(n)
     d     STRING8           authorization-protocol-data
     q                       unused, q=pad(d)

这是图表(取自本文)。

© www.soinside.com 2019 - 2024. All rights reserved.