Suricata源码阅读笔记:数据包源

2019独角兽企业重金招聘Python工程师标准>>> ...
摘要由CSDN通过智能技术生成

简介

Suricata支持多种数据包源:pcap(实时/文件)、nfq、ipfw、mpipe、af-packet、pfring、dag(实时/文件)、napatech。

每种数据包源的支持都对应于一个线程模块(Thread Module),得益于这种其模块化的架构,增加一个新的数据源支持只需要添加一个新的线程模块即可。

这里,我将主要记录最常见的pcap实时数据源的实现细节,包括相关数据结构、运行流程,以及与主框架和其他模块的交互等。

模块注册

TmModuleReceivePcapRegister函数用于实现pcap实时数据源的线程模块的注册,该函数在系统初始化阶段由RegisterAllModules函数所调用。函数内部唯一的工作就是填充TmModule类型的结构体变量:tmm_modules[TMM_RECEIVEPCAP]。下面是各字段的填充内容:

字段 填充值 含义及用处
name "ReceivePcap" 线程名字:目前没有看到代码中有对这个变量的使用。
ThreadInit ReceivePcapThreadInit 初始化函数:在_TmSlotSetFuncAppend中被传递给其所嵌入的slot的SlotThreadInit函数,而该函数将在线程执行函数(如TmThreadsSlotVar)中被调用。
Func NULL 模块执行函数:对于数据源模块,其执行函数为下面的PktAcqLoop。
PktAcqLoop ReceivePcapLoop 数据包获取函数:在TmThreadsSlotPktAcqLoop中被调用。
ThreadExitPrintStats ReceivePcapThreadExitStats 退出打印函数:用于打印模块统计信息,同样被赋给slot对应函数,然后在线程执行函数的退出阶段被调用。
ThreadDeinit NULL 清理函数:这里设成NULL可能是个BUG,因为存在一个正好用于这个目的却没有被引用过的函数:ReceivePcapThreadDeinit,其中调用pcap_close进行了清理。
RegisterTests NULL 注册测试函数:用来注册模块内部所编写的单元测试,在单元测试模式下,运行所有测试前将调用TmModuleRegisterTests函数先注册所有线程模块的单元测试函数。
cap_flags SC_CAP_NET_RAW
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值