wireshark - 分配给LUA解剖器的端口

时间:2018-02-21 16:33:13

标签: lua wireshark wireshark-dissector

我是一家为我提供3个流程的应用程序的供应商:

1st using ports 10000 and 10001 with protocol 1
2nd using ports 10001 and 10002 with protocol 1
3rd using ports 10002 and 10003 with protocol 2

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

我正在为数据编写一个解剖器,需要帮助识别wireshark中的协议。

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

1 个答案:

答案 0 :(得分:0)

在让解剖器调用相关数据时,您需要了解以下几点。

1)您需要为用于此协议的端口注册解剖器。请注意,注册不关心端口是源还是目标。如果可能,您可以注册特定于协议的端口或寄存器端口。例如,为端口10001注册协议1是没有意义的,因为协议2也使用了10001

2)无论您选择注册哪个端口,协议2 至少会在协议1 协议3的同一端口注册即可。这似乎是一个问题,但是,当您的解剖器被调用时,如果它检测到它正在处理的数据对其协议无效,它可以随时停止解剖。这样做时,它可以让Wireshark通过返回0知道没有数据被解析。这将允许在同一端口注册的任何其他解剖器尝试剖析数据。

这是一个例子。假设你的3个协议的解剖器注册如下:

协议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 10000 dst_port 10001 ,则可能会发生以下两种情况:

a) p_proto1首先被调用(因为p_proto1是为端口10000注册的):数据包对该协议有效,因此它被正确解析并且一切都很好。

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

相关问题