Написание нетривиального диссектора Wireshark - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь написать диссектор Wireshark (в C) для пользовательского протокола. Первые 3 бита пакета определяют способ построения остальной части пакета. Например, если эти 3 бита равны 000, остаток пакета представляет собой 5-битное поле, за которым следуют 2-байтовые поля. Если начальный 3 бит равен 001, остаток пакета представляет собой 13-битное поле, за которым следует поле байтов. Я могу получить ведущее 3-битное поле. В функции диссектора я попытался использовать это значение, чтобы адаптировать остальную часть рассечения таким образом:

(pseudo code)
if(hf_format==0)
{
   proto_tree_add_item( ..5-bit field...);
   proto_tree_add_item( ..first byte field...);
   proto_tree_add_item( ..second byte field...); 
}
else if (hf_format==1)
{
   proto_tree_add_item( ..13-bit field...);
   proto_tree_add_item( ..byte field...);
}
else  etc.

Почему этот подход не работает ?, Есть ли пример, на который вы можете сослаться мне?

...