如何解决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,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只能识别协议文件中列出的协议,而不能识别其他协议。我猜这里有两种可能性:
说实话,我怀疑(2)…但是偶然地问题可能是(1),我想问这个论坛。有人认为我的做法有问题吗?谢谢。
编辑:我将调用添加到“ ndpi_finalize_initalization()”中,该调用在本文的原始版本中丢失。不幸的是,这不会改变程序的行为...
解决方法
加载协议文件是对内置协议的补充;它不会覆盖它们。
在添加 ndpi_load_protocols_file
之前确保解码按预期工作。
最好将您的问题发布到 nDPI 的 github 问题: https://github.com/ntop/nDPI/issues
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。