suricata 3.1 源码分析18 (模块注册及初始化)

suricata 3.1 源码分析18 (模块注册及初始化)
th,td,tr{border:1px solid #eee;text-align:center;padding:10px;} /* css注释:只对table标签设置红色边框样式 */ |Suricata支持多种数据包源:pcap(实时/文件)、nfq、ipfw、mpipe、af-packet、pfring、dag(实时/文件)、napatech。 每种数据包源的支持都对应于一个线程模块(Thread Module),得益于这种其模块化的架构,增加一个新的数据源支持只需要添加一个新的线程模块即可。 这里,我将主要...

suricata 3.1 源码分析17 (流管理2)

suricata 3.1 源码分析17 (流管理2)
TmThreadsManagement static void *TmThreadsManagement(void *td) { /* block usr2. usr2 to be handled by the main thread only */ UtilSignalBlock(SIGUSR2); ThreadVars *tv = (ThreadVars *)td; //流管理中tv = tv_flowmgr (上文提到的) TmSlot *s = (TmSlot *)tv->tm_slots; //流管理中 s = tmm_modules[TMM_FLOWMANAGER] TmEcode r = TM_ECODE_OK; ...

suricata 3.1 源码分析16 (流管理1)

suricata 3.1 源码分析16 (流管理1)
在suricata.c的main函数执行完RunModeDispatch之后会在判断是否使用UNIX_SOCKET中调用FlowManagerThreadSpawn创建流管理线程。 /** \brief spawn the flow manager thread */ void FlowManagerThreadSpawn() { #ifdef AFLFUZZ_DISABLE_MGTTHREADS return; #endif intmax_t setting = 1; (void)ConfGetInt("flow.managers", &setting); //从配置文件获取希望开开启的flowmanagers...

suricata 3.1 源码分析15 (流更新)

suricata 3.1 源码分析15 (流更新)
流更新 通过FlowWorker线程函数中调用FlowUpdate,FlowUpdate中又调用了FlowHandlePacketUpdate来更新流。 在获取到包所属的流后,接下来将根据这个包对流进行更新。 /** \brief Update Packet and Flow * * Updates packet and flow based on the new packet. * * \param f locked flow * \param p packet * * \note overwrites p::flowflags */ void FlowHandlePacketUpdate(Flow ...

suricata 3.1 源码分析14 (流查找分配)

suricata 3.1 源码分析14 (流查找分配)
流查找/分配 通过FlowWorker线程函数中调用FlowHandlePacket来找到流。 下面将按照FlowHandlePacket的流程,分析flow engine对于新送入的解码后的数据包是如何处理的。 对于一个Packet,首先在流表中查找其所属的流是否已经存在,若存在,则直接返回该流的引用即可,否则就需要分配一个新流。 该过程的实现由FlowGetFlowFromHash完成,函数会返回一个Flow指针,表示找到的或新分配的流。 /** \brief Get F...

suricata 3.1 源码分析13 (流初始化)

suricata 3.1 源码分析13 (流初始化)
简介 Suricata中用于管理和维护流的模块称为Flow Engine,主要由两部分实现,第一部分的入口点是FlowHandlePacket函数,用于为新数据包进行流查找/分配,另一部分是FlowManagerThread线程,用于对超时的流进行删除。 初始化 初始化在FlowInitConfig中完成,与之相关的配置结构体为FlowConfig,其字段含义如下: 字段含义hash_rand用于随机化hash table的分布,后面会介绍hash_size流表所使用的hash table...

suricata 3.1 源码分析12

suricata 3.1 源码分析12
int engine_retval = EXIT_SUCCESS; while(1) { if (sigterm_count) { suricata_ctl_flags |= SURICATA_KILL; } else if (sigint_count) { suricata_ctl_flags |= SURICATA_STOP; } if (suricata_ctl_flags & (SURICATA_KILL | SURICATA_STOP)) { SCLogNotice("Signal Received. Stoppi...

suricata 3.1 源码分析11

suricata 3.1 源码分析11
/* Wait till all the threads have been initialized */ if (TmThreadWaitOnThreadInit() == TM_ECODE_FAILED) { SCLogError(SC_ERR_INITIALIZATION, "Engine initialization failed, " "aborting..."); exit(EXIT_FAILURE); } 等待子线程初始化完成。检查是否初始化完成的方式是遍历tv_root,调用TmThreadsCheckFlag检查子线程的状...

suricata 3.1 源码分析10

suricata 3.1 源码分析10
/* In Unix socket runmode, Flow manager is started on demand */ if (suri.run_mode != RUNMODE_UNIX_SOCKET) { /* Spawn the unix socket manager thread */ int unix_socket = 0; if (ConfGetBool("unix-command.enabled", &unix_socket) != 1) unix_socket = 0; if (unix_socket == 1) { Unix...

suricata 3.1 源码分析9

suricata 3.1 源码分析9
RunModeDispatch(suri.run_mode, suri.runmode_custom_mode) 初始化运行模式。首先,根据配置文件和程序中的默认值来配置运行模式(single、auto这些),而运行模式类 型(PCAP_DEV、PCAPFILE这些)也在之前已经确定了,因此运行模式已经固定下来,可以从runmodes表中获取到特定的RunMode 了,接着就调用RunMode中的RunModeFunc,进入当前运行模式的初始化函数。以PCAP_DEV类型下的autofp模式为例,该模...
Copyright © 九毛的官方博客 保留所有权利.   Theme  Ality

用户登录