suricata 3.1 源码分析20 (数据包封装)

suricata 3.1 源码分析20 (数据包封装)
th,td,tr{border:1px solid #eee;text-align:center;padding:10px;}/* css注释:只对table标签设置红色边框样式 */ 在Suricata中,用来封装数据包的结构体为Packet,核心字段如下: 字段 含义 src/dst、sp/dp、proto 五元组信息:源/目的地址,源/目的端口号,传输层协议(TCP/UDP/…)。 flow 数据包所属的流指针(类型为Flow_ *)。 ip4h、ip6h 网络层数据指针。 tcph、udph、sctph、icmp...

suricata 3.1 源码分析19 (数据包获取)

suricata 3.1 源码分析19 (数据包获取)
初始化完成后,TmThreadsSlotPktAcqLoop函数将进入一个while循环,调用slot的PktAcqLoop函数获取并处理数据包。对应的模块函数原型为: TmEcode ReceivePcapLoop(ThreadVars *tv, void *data, void *slot) 其中,data即为初始化阶段生成的PcapThreadVars结构体,而slot就是包含该模块的那个slot,传入进来的目的主要是获取线程中后续的slot(这里对应DecodePcap),以调用后续的数据包处理流程。 /** * ...

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...

centos7 部署shadowsocks服务端

centos7 部署shadowsocks服务端
首先说一下写这篇博客的原因,洒家最近告了个vps,无奈系统与业务不匹配,重装了多次。每次恢复shadowsocks找到的文档和方法都不尽相同。为了后续遇到类似情况不至再费诸多功夫,特意整合和参考的几篇文档。 1、关闭防火墙 #查看所有的可用服务 systemctl list-unit-files |grep service |grep enable #关闭服务 systemctl stop ipatables# 开机不启动 systemctl disable iptables 2、安装ShadowSocks ...

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...
Copyright © 九毛的官方博客 保留所有权利.   Theme  Ality

用户登录