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函数
版权声明:本文标题:OpenDPI-源码分析 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710092611a557367.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论