gpt4 book ai didi

c - Wireshark 解剖器 : How to Identify Missing UDP Frames?

转载 作者:太空狗 更新时间:2023-10-29 17:24:38 24 4
gpt4 key购买 nike

如何识别自定义 Wireshark 解析器中丢失的 UDP 帧?

我已经为 CQS feed 编写了自定义解析器(reference page)。接收此提要时,我们的一台服务器出现故障。根据 Wireshark,一些 UDP 帧从未收到。我知道帧已发送,因为我们所有其他服务器都没有间隙。

CQS 帧由多个消息组成,每个消息都有自己的序列号。我的自定义解析器向 Wireshark 提供以下数据:

cqs.frame_gaps          - the number of gaps within a UDP frame (always zero)
cqs.frame_first_seq - the first sequence number in a UDP frame
cqs.frame_expected_seq - the first sequence number expected in the next UDP frame
cqs.frame_msg_count - the number of messages in this UDP frame

我在自定义列中显示这些值中的每一个,如以下屏幕截图所示:wireshark screenshot

我尝试将代码添加到我的解析器中,它只保存最后处理的序列号(作为本地静态),并在解析器处理 current_sequence != (previous_sequence + 1) 的帧时标记间隙>。这不起作用,因为解析器可以随机访问顺序调用,具体取决于您在 GUI 中单击的位置。所以你可以处理第 10 帧,然后是第 15 帧,然后是第 11 帧,等等。

我的解析器有什么方法可以知道它前面的帧(或后面的帧)是否丢失了?

解析器是用 C 语言编写的。

(另见 companion post on serverfault.com)

最佳答案

您应该记住,Wireshark 会进行多次剖析。当您加载文件时,它第一次按照严格的顺序剖析数据包。然后,当您滚动 packet_tree_view 或选择一个数据包来构建它的树时,它会调用解析器。

您可以检查是否第一次调用解析器:

 if (PINFO_IS_VISITED(pinfo)) { ... };

您的解剖器在第一次和接下来的解剖中应该表现不同。

首先剖析你必须为每个数据包存储一些信息(例如在哈希表中)作为它的序列号以及它是否乱序。当您第二次被调用时,您将需要它来正确构建数据包树。

关于c - Wireshark 解剖器 : How to Identify Missing UDP Frames?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com