前面兩篇文章已經對部分代碼作了分析,這裏從總體上總結下snort處理配置文件的流程。
spa
http://my.oschina.net/u/572632/blog/289256.net
http://my.oschina.net/u/572632/blog/289421插件
snort讀取配置文件是爲了根據配置文件初始化某些數據或使能某些結構。但同時snort的配置文件又支持包含(include)其餘文件的功能,而且支持換行('\')符. blog
根據以上限制對照分析,配置文件的處理流程以下圖:
遞歸
首先初始化必要的基礎結構接口
而後解析頂層文件基礎
每一個被解析單元是以一條規則爲單位配置
分析規則部分特徵來觸發不一樣的解析方式im
若是被觸發的include方式則遞歸解析被包含的子文件總結
根據以上發現snort解析配置文件最重要的思想就是根據解析出來的數據選擇下一步細化處理的插件,這樣的處理方式至關靈活.
將待動態加載配置的模塊看做數據初始化管理中的單元,存放待獲取配置文件完成初始化接口的集合看做插件管理,將文件頂層詞法分析看做文件解析管理。
待初始化的模塊將本身的接口提供給插件管理註冊
插件管理整理各個模塊的初始化接口,並本身再註冊部分必要的規則分析接口
文件解析管理負責不斷讀取配置文件,並以規則條目爲頂層單元觸發頂層插件
不斷的分析該規則特徵,並在提取到知足觸發條件的特徵後觸發相應的插件.
在解析規則的過程當中也觸發了部分待初始化的數據註冊的接口,這些接口也就根據配置文件對相應的模塊進行了使能和初始化.