admin 管理员组

文章数量: 1184232


2024年3月11日发(作者:医护ppt模板免费下载)

实用文档

OpenDPI-1.3.0源代码分析:

1. OpenDPI_demo中的main函数:

该main函数主要由七个子函数组成,他们分别为:

1.1 parseOptions:处理给定的参数,比如运行时指定的:-f ./,分析参数是否

正确。该函数不是非常重要,但如果我们改写程序时想要程序能有新的功能,可以

在这里添加类似开关的代码,如定义一些宏。

1.2 setupDetection:非常重要的初始化函数,其会的初始化整个程序的最重要的数据结

构:ipoque_struct,所有协议的回调函数都是在这里进行绑定的,下面两个函数会

的进行重点分析:

除了初始化ipoque_struct外,还会的给几个全局变量分配内存,这些全局变量包括:

osdpi_ids:所有id对应的变量,每个id用来连接一个IP与一个表示该IP的ID

osdpi_flows:所有flow对应的变量,每个flows用来连接一个flow与一个表示该flow

的KEY

protocol_counter,protocol_counter_bytes:与协议相关的计数器,类型为数组

1.3 openPcapFile:常规的打开pcap文件

1.4 runPcapLoop:处理pcap的主循环,这个程序的灵魂,其会的最终通过回调函数来

调用各个协议的分析函数。

1.5 closePcapFile:常规的关闭pcap文件

1.6 printResults:输出统计结果的数据,请注意观察下面的两个循环:

实用文档

你会发现最终我们的结果存在与

prot_long_str,protocol_counter,protocol_counter_bytes以及osdpi_flows这几个全局变

量中,所以这几个变量我们在分析的时候需要着重分析。这些全局变量的初始化详

见1.2

1.7 terminateDetection:处理程序的善后工作,比如free掉我们在1.2里建立的那几个

全局变量。换句话说,如果我们在程序运行中间使用了ctrl+c中断了程序,那么就

会造成内存泄漏。

2. setupDetection()

2.1 该函数为整个程序的初始化设定函数,所有回调函数的绑定,全局变量的定义都来

自这个函数。下面我们来分析一下其几个重要的函数调用

2.2 ipoque_init_detection_module

该函数:

返回值:一个ipoque_detection_module_struct的指针,其指向的对象为该程序的核

心数据结构。整个程序有且只有一个该结构

参数1:tick_per_second 这里的实参为1000,指每秒的时钟滴答(具体干什么用的

不清楚,好像是用来说明cpu每秒多少个时钟滴答的)

参数2:ipoque_malloc,指定的用来分配内存的类似于malloc的函数

参数3:ipoque_debug_printf,指定的用来进行debug下的print的函数

总的来说,该函数就是用malloc函数分配了一个ipoque_detection_module_struct,

该结构体中的许多成员被设定成了默认值。并返回指向该结构体的指针。注意,该

函数并未让该结构体绑定回调函数。

2.3 ipoque_set_protocol_detection_bitmask2

所有的回调函数都有该函数进行绑定,大部分标志位(bitmask)的处理,也由该函

数进行初始化。

下面进行具体的分析

2.3.1 调用IPOQUE_BITMASK_SET,使所有标志位使能:

2.3.2 一个size:

这里的callback_buffer_size是指的回调函数的个数,为了安全起见我们现在

先设置其为0,其作用可以见我下面要分析的runPcapLoop函数


本文标签: 函数 程序 分析 用来 回调