TCP选项的剖析器

TCP选项的剖析器,tcp,lua,wireshark,wireshark-dissector,Tcp,Lua,Wireshark,Wireshark Dissector,我刚开始用Lua写解剖者,我有两个简单的问题。我有一个包含TCP选项的数据包,如MSS、TCP SACK、时间戳、NOP、窗口缩放、未知。我基本上是试图剖析TCP选项字段中的未知部分。我知道我将不得不使用链式解剖器 第一个问题是,当使用链式解析器解析TCP选项时,是否必须从头解析所有选项。例如,我需要解析MSS、TCP SACK等。。。。然后最后解析未知部分,或者有没有直接的方法让我跳到未知部分 我遇到的第二个问题是,我看过许多自定义协议剖析器的代码,如果我需要剖析遵循(例如)TCP的协议,那么

我刚开始用Lua写解剖者,我有两个简单的问题。我有一个包含TCP选项的数据包,如MSS、TCP SACK、时间戳、NOP、窗口缩放、未知。我基本上是试图剖析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,解析器将从选项的起始位置开始解析?

tcp选项是“uint8_t type;uint8_t len;uint8_t*data”结构。 我通常给常用的起个名字。例如getSack(),getMss()。 对于其他对象,将它们保留在一个数组中(最大大小为20)

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