写点什么

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

作者:于顾而言
  • 2022 年 9 月 17 日
    江苏
  • 本文字数:692 字

    阅读完需:约 2 分钟

网络入侵检测系统之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 报文


检测引擎匹配


日志输出


流程图



发布于: 刚刚阅读数: 4
用户头像

于顾而言

关注

| 诗酒趁年华诗酒 √ | 2022.09.10 加入

| NJUST Optical M.A. | | SASE | SangFor | Senior Developer | 知乎专栏:https://www.zhihu.com/people/whisper-of-the-Koo

评论

发布
暂无评论
网络入侵检测系统之Suricata(五)--Worker Model线程调度详解详解_网络安全_于顾而言_InfoQ写作社区