suricata初始化流程

                                            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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章