nDPI :: Удаляет ли список протоколов поставки список протоколов "по умолчанию"?

Я изучал библиотеку nDPI с помощью множества проб и ошибок и помощи на этом форуме. Недавно я написал новую версию своей программы на C (написанной на Ubuntu, компилятор - GCC) и считаю, что правильно использую библиотеку nDPI. Вот общий обзор:

#include "ndpi_config.h"

static struct ndpi_detection_module_struct *ndpi_info_mod = NULL;

int main(int argc, char ** argv){

        // Set up nDPI
        // This is adapted from the "nDPI Quick Start Guide"
        NDPI_PROTOCOL_BITMASK all;
        ndpi_info_mod = ndpi_init_detection_module(ndpi_no_prefs);
        if(ndpi_info_mod == NULL) return -1;
        NDPI_BITMASK_SET_ALL(all);
        ndpi_set_protocol_detection_bitmask2(ndpi_info_mod, &all);
        ndpi_load_protocols_file(ndpi_info_mod, 
            "/home/me/myProtocols.protos");
        ndpi_finalize_initalization( ndpi_info_mod ); // Init the Detect Mod

        u_char* buffer = malloc( sizeof(char) * 1000 );

        while(1){

                buffer = capturePacket(); //this works, packet stored as char*

                // ...build all necessary nDPI structs here...

                ndpi_protocol ret = ndpi_detection_process_packet(
                        ndpi_info_mod, flowStruct, buffer, bufferSize, 0, 
                        srcStruct, dstStruct );

                printf("This packet was::  %s  (%d)\n", 
                        ndpi_get_proto_name(ndpi_info_mod, ret.app_protocol),
                        ret.app_protocol );
        }
}

В целях тестирования я специально написал очень короткий файл myProtocols.protos:

# Comment field :: myProtocols.protos
tcp:5201@iPerf3
tcp:80@Some_Useful_Protocol

Вышеупомянутое скомпилировано и работает очень хорошо. Я запустил тестовый трафик, включая iPerf3, HTTP, FTP и SNMP. Вот результат, отредактированный для краткости:

This packet was::  iPerf3  (243)
This packet was::  Some_Useful_Protocol  (244)
This packet was::  Unknown  (0)
This packet was::  Unknown  (0)

… Где первым пакетом был iPerf3, вторым - HTTP, третьим - FTP и четвертым - SNMP. Проверяя с помощью Wireshark, я уверен, что отправляю настоящий трафик. Я достаточно поигрался с nDPI, чтобы знать, что если вы установите его и будете использовать без предоставления файла протокола, он все равно сможет распознавать общие приложения, такие как HTTP, FTP, SNMP и т. Д. Я ожидал, что если вы предоставите файл протокола, этот файл будет дополнять, а не перезаписывать список "встроенных" протоколов. Этот документ предлагает то же самое в разделе "Расширение nDPI". Далее, когда я закомментировал эту строку…

ndpi_load_protocols_file(ndpi_info_mod, "/home/me/myProtocols.protos");

… Вывод программы стал таким…

This packet was::  Unknown  (0)
This packet was::  Unknown  (0)
This packet was::  Unknown  (0)
This packet was::  Unknown  (0)

… Что явно не так.

Таким образом, похоже, что мой nDPI может распознавать только протоколы, перечисленные в моем файле протокола, и никакие другие. Я предполагаю, что здесь есть две возможности:

  1. Я сделал что-то не так, запустив nDPI, и список протоколов не привязан? Или стерли? ...или что-то…?

  2. Мой код, который захватывает пакет, что-то портит и делает его нечитаемым для nDPI.

Если честно, я подозреваю (2)… но на случай, если проблема может быть (1), я хотел спросить этот форум. Кто-нибудь видит что-то не так с моим подходом? Спасибо.

РЕДАКТИРОВАТЬ: я добавил вызов "ndpi_finalize_initalization()", который отсутствовал в исходной версии этого сообщения. К сожалению, это не меняет поведения программы...

1 ответ

Загрузка файла протокола дополняет встроенные протоколы; он не перезаписывает их.

Перед добавлением убедитесь, что декодирование работает должным образом. ndpi_load_protocols_file.

Было бы лучше разместить свой вопрос в вопросах nDPI github:https://github.com/ntop/nDPI/issues

Другие вопросы по тегам