Как создать диссектор Wireshark в C, который может анализировать протокол, чтобы определить количество поддеревьев для создания, а затем программно создать это количество поддеревьев.
Я работаю с протоколом, который состоит из 2 частей
1) количество запросов в пакете (длиной 2 байта)
2), за которыми следуют эти запросы (от 1 до 20 запросов по 5 байт)
Каждый запрос имеет длину 5 байтов
2 bytes - Request number
3 bytes - random number
вот пример пакета
020155502666
Этот разобранный пакет
Length : 02
request 01:
random number : 555
request 02:
random number: 666
Этот код позволяет мне создать главное дерево с одним поддеревом, к которому я добавляю номер запроса и случайное число. Как мне изменить его, чтобы программно создать поддерево под главным деревом для каждого объекта запроса.
dissect_packet (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
/* Set up structures needed to add the protocol subtree and manage it */
proto_item *ti
proto_tree *tree , *tree_sub
/* Other misc. local variables. */
guint offset = 0;
guint16 number_of_requests;
/* create display subtree for the protocol */
ti = proto_tree_add_item(tree, tree, tvb, 0, -1, ENC_NA);
packet_tree = proto_item_add_subtree(ti, tree_sub);
proto_tree_add_item(packet_tree, hf_requestID, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(packet_tree, hf_random_number, tvb, offset, 3, ENC_BIG_ENDIAN);
offset +=3;
}