suricata初始化流程

本文详细解析了Suricata的初始化流程,包括运行模式注册、模块注册与初始化、线程创建等关键步骤,深入探讨了这款高性能IDS/IPS系统的内部架构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                            suricata初始化流程

1、简介

 suricata是一款高性能的IDS、IPS和网络安全监测引擎。采用多线程模式,利用多核优势。支持多种协议:例如ip4、ip6、TCP、UDP、HTTP、FTP、POP3等协议。可以动态加载过滤规则。

2、main函数流程

 

    (1)调用RunModeRegisterRunModes函数注册运行模式

    RunModeIdsPcapRegister();      // IDS+pcap

    RunModeFilePcapRegister();     // File+pcap

    RunModeIdsPfringRegister();    // IDS+pfring

    RunModeIpsIPFWRegister();      // IPS+ipfw

    RunModeIpsNFQRegister();       // IPS+nfq

    RunModeErfFileRegister();      // erf+file

    RunModeErfDagRegister();       // erf+dag

    RunModeNapatechRegister();     // napatech

    RunModeIdsAFPRegister();       // IDS+AFP

RunModeUnixSocketRegister();   // UnixSocket

每种运行模式调用RunModeRegisterNewRunMode注册,

RunModeRegisterNewRunMode(RUNMODE_PCAP_DEV, "single",

                              "Single threaded pcap live mode",

                              RunModeIdsPcapSingle);

运行模式名字、运行模式执行函数、运行模式描述保存到全局数组runmodes。

(2)调用RegisterAllModules注册各模块

/* commanders */

    TmModuleUnixManagerRegister();

.......

模块保存到TmModule tmm_modules[TMM_SIZE];

typedef struct TmModule_ {

    const char *name;

    /** thread handling */

    TmEcode (*ThreadInit)(ThreadVars *, const void *, void **);//线程初始化

    void (*ThreadExitPrintStats)(ThreadVars *, void *);

    TmEcode (*ThreadDeinit)(ThreadVars *, void *);

    /** the packet processing function */

    TmEcode (*Func)(ThreadVars *, Packet *, void *, PacketQueue *, PacketQueue *);

    TmEcode (*PktAcqLoop)(ThreadVars *, void *, void *);

    /** terminates the capture loop in PktAcqLoop */

    TmEcode (*PktAcqBreakLoop)(ThreadVars *, void *);

    TmEcode (*Management)(ThreadVars *, void *);

    /** global Init/DeInit */

    TmEcode (*Init)(void); //全局初始化模块函数

    TmEcode (*DeInit)(void);

    void (*RegisterTests)(void);

    uint8_t cap_flags;   /**< Flags to indicate the capability requierment of

                             the given TmModule */

    /* Other flags used by the module */

    uint8_t flags;

} TmModule;

(3)模块初始化,调用TmModuleRunInit()执行TmModule tmm_modules[TMM_SIZE]中的全局初始化模块函数。

(4)RunModeDispatch()函数调用,根据配置获取运行模式,然后根据运行模式执行全局数组runmodes中的运行模式执行函数。

(5)运行模式执行函数

   例如:RunModeFilePcapSingle()

通用模块初始化RunModeInitialize

创建tv实例TmThreadCreatePacketHandler

从tmm_modules中获得模块TmModuleGetByName

插入槽slot

TmThreadSpawn真正创建线程函数

整理下执行顺序:

运行模式注册,设置执行函数

所有模块注册,设置模块相关函数

所有模块初始化

从配置获取运行模式类型,执行函数

创建线程

根据模块名称从全局数组tmm_modules中得到模块指针

插入线程槽slot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值