Как вы создаете поддерево анализатора wireshark программно на основе значения протокола? - PullRequest
0 голосов
/ 31 октября 2018

Как создать диссектор 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;


}
...