问题描述
我已经通过反复试验和本论坛的帮助来学习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,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等。我希望如果您提供协议文件,该文件将 补充 ,而不是 覆盖 ,即“嵌入”协议列表。 This paper在“扩展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只能识别协议文件中列出的协议,而不能识别其他协议。我猜这里有两种可能性:
-
在启动nDPI和“预烘焙”列表时,我做错了什么 协议尚未绑定?还是删除了? ...或某事...?
-
我捕获数据包的代码搞砸了, nDPI无法读取。
说实话,我怀疑(2)…但是偶然地问题可能是(1),我想问这个论坛。有人认为我的做法有问题吗?谢谢。
编辑:我将调用添加到“ ndpi_finalize_initalization()”中,该调用在本文的原始版本中丢失。不幸的是,这不会改变程序的行为...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)