Вероятно, существует множество различных механизмов.Вы можете скачать диссекторы и изучить источник, чтобы выяснить различные методы.
Я написал диссектор для сетевого анализатора и портировал его в Ethereal, а затем в Wireshark (или, возможно, кто-то еще портировал его; я неПомните).Но основная логика заключается в том, что диссектор добавляется в список возможных диссекторов.Wireshark вызывает диссектор и, если может, декодирует пакет.Если нет, он вызывает следующий в цепочке.
В написанном мною коде я просто проанализировал пакет (UDP в моей ситуации), чтобы определить, соответствует ли он профилю желаемого пакета, используя контрольные суммы и известныеданные в пакете.Если он решил, что это пакет, который меня интересовал, я просто извлек из него различные фрагменты интересных данных.Функция tvb_get_ptr
возвращает указатель на начало данных.