4

我是在 Lua 中编写解剖器的新手,我有两个简单的问题。我有一个数据包,它的 TCP 选项为 MSS、TCP SACK、TimeStamps、NOP、Window Scale、Unknown。我基本上是在尝试剖析 TCP 选项字段中的未知部分。我知道我将不得不使用链式解剖器。

第一个问题是在使用链式解析器解析 TCP 选项时,我是否必须从头开始解析所有选项。例如,我是否需要解析 MSS、TCP SACK、....然后最后解析未知部分,或者是否有任何直接的方法可以让我跳转到未知部分。

我遇到的第二个问题是我已经看到了许多自定义协议解析器的代码,如果我需要解析遵循(例如)TCP 的协议,那么我必须包括以下内容:

-- load the tcp.port table
tcp_table = DissectorTable.get("tcp.port")
-- register our protocol to handle tcp port
tcp_table:add(port,myproto_tcp_proto)

我的问题是,无论如何我可以跳到协议的中间。例如,在我的情况下,我想解析 TCP 选项。我可以直接调用 tcp.options 并且解析器将从选项开始的位置开始剖析吗?

4

1 回答 1

0

TCP 选项是“uint8_t 类型;uint8_t len;uint8_t* 数据​​”结构。我通常给常用的一个名字。例如 getSack()、getMss()。对于其他人,将它们保存在一个数组中(最大大小为 20)。

对于您的第二个问题,您的意思是您不关心 TCP 标头,对吗?如果是这样,只需将指针再移动 20 个字节即可访问 TCP 选项。

于 2014-01-03T00:36:04.863 回答