Расширенная кластеризация с помощью pfring
Я пишу код, способный распознавать несколько различных протоколов, используя pfring с кластеризацией (cluster_per_flow_5_tuple для балансировки трафика), и мне необходимо принудительно направить весь трафик FTP (пассивный режим) и данных FTP в один и тот же поток.
pfring_set_cluster( pfringP, <clusterID>, cluster_per_flow_5_tuple )
В целях распознавания мне нужно обрабатывать управление FTP и данные FTP в одном и том же потоке, но поскольку они представляют собой разные потоки (данные отправляются в разные пары портов), pfring направляет данные в разные потоки. Из-за этого поток, обрабатывающий данные FTP, может обработать все пакеты FTPData, прежде чем второй поток обработает управляющие данные FTP, что приведет к невозможности распознать протокол.
Я попытался изменить параметр кластеризации, чтобы использовать только IP-адреса источника и назначения, но столкнулся с проблемами производительности.
Я знаю, что в последней версии pfring есть поддержка nDPI для обнаружения протокола L7 (библиотека PF_RING FT), но поскольку код был написан задолго до его появления, адаптация кода для использования этой библиотеки слишком дорога. Возможно, можно включить только распознавание FTP с использованием PFRING FT, но я пока не нашел, как это сделать.
Есть ли способ решить эту проблему, используя возможности pfring?