我不熟悉在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,解析器会从选项开始的位置开始解析吗?
答案 0 :(得分:0)
TCP选项是“uint8_t type; uint8_t len; uint8_t * data”结构。 我通常会给常用的一个名字。例如getSack(),getMss()。 对于其他人,请将它们保存在一个数组中(最大大小为20)。
对于你的第二个问题,你的意思是你不关心TCP标题,对吧?如果是这样,只需将指针进一步移动20个字节即可访问TCP选项。