Подсчет повторных передач TCP и поиск структуры для хранения информации о пакетах (C) - PullRequest
0 голосов
/ 11 октября 2019

Я создаю программу на C, которая анализирует пакеты в указанном интерфейсе, используя libpcap, и подсчитывает повторные передачи TCP в секунду.

Для хранения информации о пакете и последующего подсчета вхождений повторных передач мне понадобится словарная структура, похожая на следующую, где я сохраню источник, место назначения и порядковый номер пакета (или его хеш)в качестве ключа и номер вхождения порядкового номера в качестве значения:

Источник : 192.168.1.2

Пункт назначения : 192.168.2.2

порядковый номер : 123456789

вхождения : 2

  • ключ может быть кортежем:

    { (src_ip, dst_ip, seq_number) : #ocurrences }

    { (192.168.1.2, 192.168.2.2, 123456789) : 2 }

  • или хэш (например, md5) для уникальной идентификации пакета:

    { hash_of_src_dst_seqnum : #ocurrences }

    { 31078EB0CC34525058847E0BC632B23A : 2 }

Для этой части словаря я знаю, что могу создать структуру key_value, например:

struct key_value
{
   int key;
   char* value;
};

Проблема здесь в том, что я должен хранить информацию только на 10.000 пакетов. Когда структура заполнена, самая старая вставленная информация должна быть удалена (например, FIFO)

Мой вопрос: учитывая, что это программа на C, какая структура будет наиболее подходящей (также с точки зрения производительности) дляхранение нескольких (но ограниченных) словарей? Связанный список, FIFO, кольцевой буфер? И каков будет код для той же структуры, чтобы он принимал словарь в качестве своих элементов?

ПРИМЕЧАНИЕ: структура должна выглядеть примерно так:

[ { 31078EB0CC34525058847E0BC632B23A : 2 }, { 31078EB0CC34525058847E0222232B23A : 1 }, ....]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...