suricata 3.1 源码分析4

原创 2016年08月31日 09:31:03

原文链接:http://www.9mblog.com/82.html

GlobalInits();

初始化全局变量。包括:数据包队列trans_q、数据队列data_queues(干嘛的?)、对应的mutex和cond、建立小写字母表。

TimeInit();

初始化时间。包括:获取当前时间所用的spin lock,以及设置时区(调用tzset()即可)。

SupportFastPatternForSigMatchTypes();

为快速模式匹配注册关键字。调用SupportFastPatternForSigMatchList函数,按照优先级大小插入到sm_fp_support_smlist_list链表中。

if (suri.run_mode != RUNMODE_UNIX_SOCKET) {
        StatsInit();
}

若运行模式不为RUNMODE_UNIX_SOCKET调用StatsInit()初始化全局变量stats_ctx。

/* Load yaml configuration file if provided. */
if (LoadYamlConfig(&suri) != TM_ECODE_OK) {
        exit(EXIT_FAILURE);
}

调用LoadYamlConfig读取Yaml格式配置文件。若用户未在输入参数中指定配置文件,则使用默认配置文件(/etc/suricata/suricata.yaml)。Yaml格式解析是通过libyaml库来完成的,解析的结果存储在配置节点树(见conf.c)中。对include机制的支持:在第一遍调用ConfYamlLoadFile载入主配置文件后,将在当前配置节点树中搜寻“include”节点,并对其每个子节点的值(即通过include语句所指定的子配置文件路径),同样调用ConfYamlLoadFile进行载入。

if (suri.run_mode == RUNMODE_DUMP_CONFIG) {
        ConfDump();
        exit(EXIT_SUCCESS);
}

若运行模式为DUMP_CONFIG,则调用ConfDump打印出当前的所有配置信息。ConfDump通过递归调用ConfNodeDump函数实现对配置节点树的DFS(深度优先遍历)。

SCLogLoadConfig(suri.daemon, suri.verbose);

再次初始化日志模块。这次,程序将会根据配置文件中日志输出配置(logging.outputs)填充SCLogInitData类型的结构体,调用SCLogInitLogModule重新初始化日志模块。

SCPrintVersion();

打印版本信息。这是Suricata启动开始后第一条打印信息。

UtilCpuPrintSummary();

打印当前机器的CPU/核个数,这些信息是通过sysconf系统函数获取的。

if (ParseInterfacesList(suri.run_mode, suri.pcap_dev) != TM_ECODE_OK) {
        exit(EXIT_FAILURE);
}

解析接口设置名称(网络设备,如eth0,eth1等)。如果suri.pcap_dev为NULL,则从配置文件获取设备名称。如果suri.pcap_dev不为NULL,则将读入的配置结点的设备名称改为suri.pcap_dev。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Suricata之源代码(一)

第一次系统性的写blog,写的不好,请大家多多包涵。         在介绍Suricata源代码之前,大致介绍一下Suricata的工作流程。在suricata中主要使用了回调函数将所有的模块连接...
  • superbfly
  • superbfly
  • 2016年03月08日 11:45
  • 1436

Suricata之源代码(三)

Yaml文件的构造          在准备说下面代码所干的事情之前,我准备介绍一下suricata.yaml文件。介绍引用自百度百科Yaml 概念     YAML(IPA: /ˈjæmə...
  • superbfly
  • superbfly
  • 2016年03月08日 11:48
  • 1254

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

流查找/分配通过FlowWorker线程函数中调用FlowHandlePacket来找到流。 下面将按照FlowHandlePacket的流程,分析flow engine对于新送入的解码后的数据包是...
  • superbfly
  • superbfly
  • 2016年09月14日 10:47
  • 764

Suricata之源代码(一)

第一次系统性的写blog,写的不好,请大家多多包涵。         在介绍Suricata源代码之前,大致介绍一下Suricata的工作流程。在suricata中主要使用了回调函数将所有的模块连接...
  • superbfly
  • superbfly
  • 2016年03月08日 11:45
  • 1436

suricata 3.1 源码分析29 (数据包队列)

这块的东西我现在还没有用到,所以很不厚道的抄了背着笔记本流浪的原文下来。简介Suricata中使用队列来缓存数据包,包括缓存线程模块内部新产生数据包的线程内队列,以及线程之间用来传递数据包的线程间队列...
  • superbfly
  • superbfly
  • 2016年10月12日 13:21
  • 1229

Suricata源码阅读笔记:main()

main()函数位于suricata.c文件,其主要流程如下: 1. 定义并初始化程序的全局实例变量。 SCInstance类型的suri变量用来保存程序当前的一些状态、标志等上下文环境,...
  • vevenlcf
  • vevenlcf
  • 2016年01月28日 14:15
  • 1100

Suricata之源代码(三)

Yaml文件的构造          在准备说下面代码所干的事情之前,我准备介绍一下suricata.yaml文件。介绍引用自百度百科Yaml 概念     YAML(IPA: /ˈjæmə...
  • superbfly
  • superbfly
  • 2016年03月08日 11:48
  • 1254

suricata中模式概念详解

截止目前,结合开源中国中“背着笔记本流浪”的blog中文章,已经对main函数和数据包收取、解码有了初步了解。其中遇到的困难和疑惑的地方记录在这里,便于今后学习和提升。 1、网络编程知识经验不足...
  • wsk004321
  • wsk004321
  • 2014年05月19日 09:48
  • 2303

suricata命令行

suricata命令行选项说明 你能两种方式使用命令行选项,用一个横杠后面跟一个字符,或两个横杠后面跟一个单词,例如: -a --long-option ===========...
  • wsk004321
  • wsk004321
  • 2014年05月13日 11:30
  • 1802

suricata 3.1 源码分析22 (数据包处理2)

对数据包进行进一步处理的TmThreadsSlotVarRun函数原型如下: TmEcode TmThreadsSlotVarRun(ThreadVars *tv, Packet *...
  • superbfly
  • superbfly
  • 2016年09月27日 09:22
  • 781
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:suricata 3.1 源码分析4
举报原因:
原因补充:

(最多只允许输入30个字)