Диссектор Wireshark: как определить Недостающие кадры UDP?

Как Вы определяете недостающие кадры 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

И я отображаю каждое из этих значений в пользовательских столбцах, как показано в этом снимке экрана: wireshark screenshot

Я пытался добавить код к своему диссектору, который просто сохраняет обработанный в последний раз порядковый номер (как локальные помехи) и отмечает разрывы, когда диссектор обрабатывает кадр где current_sequence != (previous_sequence + 1). Это не работало, потому что диссектор можно назвать в порядке произвольного доступа, в зависимости от того, где Вы нажимаете в GUI. Таким образом, Вы могли обработать кадр 10, затем структурируйте 15, затем структурируйте 11 и т.д.

Есть ли какой-либо путь к моему диссектору, чтобы знать, отсутствует ли кадр, который прибыл перед ним (или кадр, который следует)?

Диссектор записан в C.

(См. также сопутствующее сообщение на serverfault.com),

6
задан Glorfindel 28 July 2019 в 15:06
поделиться

1 ответ

Я не знаю, можете ли вы заглянуть в предыдущие или последующие кадры, но когда Wireshark загружает tcpdump, он будет вызывать ваш диссектор на каждом из кадров по порядку. Итак, я мог бы добавить статическую локальную переменную , которая представляет собой массив или хеш-таблицу, и просто хранить там свои значения. Затем ваш диссектор может проверить этот массив на предыдущие и последующие кадры и провести его анализ.

Вы должны посмотреть на этот pinfo vairable, это один из аргументов функции для информации о номере кадра, информации IP и т. Д.

0
ответ дан 17 December 2019 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: