wireshark - 端口分配给LUA分析器

我有一个供应商提供了一个使用3个进程的应用程序:

第一个使用端口10000和10001,采用协议1
第二个使用端口10001和10002,采用协议1
第三个使用端口10002和10003,采用协议2

所有数据都从同一个IP地址发送/接收,一个端口用于发送数据,另一个端口用于接收数据(端口是udp端口)

我正在编写一个分析器来分析数据,并需要帮助识别wireshark中的协议。

我很高兴得到您的帮助/想法,以识别消息。

点赞
用户7098036
用户7098036

以下是关于在相关数据上调用你的解剖器时需要了解的几件事:

1)需要为所使用的协议注册你的解剖器端口。注意,注册并不关心端口是源端口还是目的端口。你可以注册两个端口,或者如果可能的话,注册特定于你的协议的端口。例如,“为端口10001注册协议1是没有意义的,因为10001也被协议2使用”

2)无论你选择注册哪些端口,你的协议2至少将与协议1或协议3注册到相同的端口。这可能看起来是个问题,但是,当你的解剖器被调用时,如果它检测到它正在处理的数据无效,则它可以随时停止解剖。在这样做时,它可以通过返回0来告诉Wireshark没有数据被解剖。这将允许为同一端口注册的任何其他解剖器尝试解析数据。

下面是一个例子。假设你的三个协议的解剖器分别注册如下:

协议1

local udp_encap_table = DissectorTable.get("udp.port")
udp_encap_table:add(10000, p_proto1)

协议2

local udp_encap_table = DissectorTable.get("udp.port")
udp_encap_table:add(10001, p_proto2)

协议3

local udp_encap_table = DissectorTable.get("udp.port")
udp_encap_table:add(10003, p_proto2)

在这种情况下,如果Wireshark处理一个src_port 10000dst_port 10001的数据包,会发生两件事:

a)首先调用p_proto1(因为p_proto1已经为端口10000注册了):数据包对于该协议是有效的,因此它会被适当地解析,一切都很好。

b)首先调用p_proto2(因为p_proto2已经为端口10001注册):这不是一个有效的协议2数据包,因此p_proto2应该返回0,然后Wireshark将调用p_proto1,它将正确地解剖数据包。

2018-04-03 01:41:22