网络入侵检测系统之Suricata(五)--Worker Model线程调度详解详解

Worker Mode线程调度

我们NIDS系统雏形版本目前采用的single模式,即Start One thread with each thread doing all the work,这里的实现可以类比suricata PCAP_FILE_DEV 模式,读取pcap文件并将其封装在Packet结构中,各个模块都靠packet结构传递,然后依次进行解码,重组,检测,解析,输出日志。

我们后续只需要将读取pcap的代码修改一下,对接dpdk的报文收发队列即可

  1. suricata会根据命令行参数 ./suricata -r http.pcap --runmode single,得到当前激活的运行模式为RUNMODE_PCAP_file, "single"
  2. RunModeDispatch(),初始化运行模式,通过RUNMODE_PCAP_file, "single"可以得到对应RunMode中的RunModeFunc,进入当前运行模式的初始化函数RunModeFilePcapSingle()
  3. 从配置树中得到"pcap-file.file",pcap文件路径,然后会设置一些参数,包括线程是否绑核,检测线程较CPU核数的比率
  4. single worker模式下无需创建队列,只设置了上一级和下一级队列的处理函数(handler->TmqhInputPacketpool+TmqhOutputPacketpool),以及功能模块插槽(slots->TmThreadsSlotPktAcqLoop)
  5. 线程创建完毕后会注册到线程池中统一管理,并标识该线程local id
  6. 线程启动,依次执行线程插槽中各个模块的初始化函数,并为flowworker模块额外分配一个flow queue和packet queue,分配完毕后,依次执行线程处理函数PktAcqLoop或Fuc

ReceivePcapFile TMmodule

从packetpool中获取一个空的报文描述符,然后读取一个目录或单个文件,然后填充报文描述符

DecodePcapFile TMmodule

解码报文,分片重组,解码ip层,mac层,tcp/udp等,填充报文描述符

FlowWorker TMmodule

StreamTCP:跟踪维护tcp流,重组tcp报文
检测引擎匹配
日志输出

流程图如下

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于顾而言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值