Как определить недостающие кадры UDP в настраиваемом диссекторе Wireshark?
Я написал собственный диссектор для канала CQS (справочная страница). На одном из наших серверов произошел сбой при получении этого фида. Согласно 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
И я отображаю каждое из этих значений в настраиваемых столбцах, как показано на этом снимке экрана:
Я попытался добавить в свой диссектор код, который просто сохраняет последний обработанный порядковый номер (как локальный статический) и отмечает пропуски, когда диссектор обрабатывает кадр, где current_sequence != (previous_sequence + 1)
. Это не сработало, потому что диссектор можно было вызвать в порядке произвольного доступа, в зависимости от того, где вы щелкаете в графическом интерфейсе. Итак, вы можете обработать кадр 10, затем кадр 15, затем кадр 11 и т. Д.
Может ли мой диссектор узнать, отсутствует ли предыдущий кадр (или следующий за ним)?
Диссектор написан на C.
(См. Также сопутствующий пост на serverfault.com)