本文主要是介绍网络入侵检测系统之Suricata(九)--Storage实现详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
suricata针对一些小的线程共享空间采用多种storage,比如Host storage,这个数据区就是存储阈值option实现时一些共享数据:
threshold option-> type threshold , track by_dst, count 5, seconds 60
代表1分钟内命中5次后才会产生一个告警,那么时间戳,命中次数就会存储在这个小的加锁的命名空间。加锁因为多个线程会同时对该区域读写,命名意味着可以区分数据区种类。
- storage注册
storage数据区由注册函数,将需要创建的数据区摘要存储起来,这一步并非真实分配空间。
例如storag_list->"threshold 20字节 mallco free"->"test 8字节 myalloc my free"->... ...
2. host storage
数据区的真实创建需要用到下面的结构体Host,我理解它是一种钥匙,上电时会预分配一些host对象,创建host对象时,并非只分配sizeof(host),而是多分配出若干个void *,这个数量和注册storage数据区一致。后面这个host通过偏移sizeof(host)+id,这样就能找到各个数据区了,每个host都会分配自己的数据区,彼此不干扰。因为,Host对象是加锁的,所以取得host时会有HostGetHostFromHash和HostRelease的操作。
3. Host storage 分配数据区流程
Host对象负责数据区的读写,它可以调用注册的malloc分配size的字节数,也可以set为其他的数据区指针。
这篇关于网络入侵检测系统之Suricata(九)--Storage实现详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!