tcp - TCP 选项的解析器

标签 tcp lua wireshark wireshark-dissector

我是在 Lua 中编写解析器的新手,我有两个简短的问题。我有一个包含 TCP 选项的数据包,如 MSS、TCP SACK、时间戳、NOP、窗口比例、未知。我基本上是在尝试剖析 TCP 选项字段中的未知部分。我知道我将不得不使用链式解剖器。

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

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

-- 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)

我的问题是,无论如何我都可以跳到协议(protocol)的中间。例如,在我的例子中,我想解析 TCP 选项。我可以直接调用 tcp.options 并且解析器将从选项开始的地方开始剖析吗?

最佳答案

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

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

关于tcp - TCP 选项的解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19044592/

相关文章:

TCP 不会每隔一个段确认一次

java - 将Java函数绑定(bind)到Lua的方法?

Lua 模式 - 魔兽世界 - 八零数据库 80wdb.com

c# - 使用服务器管理 tcp 连接

python - 如何使用 python 脚本更改 tcp keepalive 计时器?

java - 测试客户端服务器

regex - 如何在Lua中写一个等价于/(\(\))?$/in js的正则表达式

c++ - 用于查看 Wireshark 重置数据包的 C/C++ 应用程序

build - 为什么从源代码编译Wireshark失败?

wireshark - 从 Wireshark 中提取 Mpeg TS