前面两篇文章已经对部分代码作了分析,这里从总体上总结下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解析配置文件最重要的思想就是根据解析出来的数据选择下一步细化处理的插件,这样的处理方式至关灵活.
将待动态加载配置的模块看做数据初始化管理中的单元,存放待获取配置文件完成初始化接口的集合看做插件管理,将文件顶层词法分析看做文件解析管理。
待初始化的模块将本身的接口提供给插件管理注册
插件管理整理各个模块的初始化接口,并本身再注册部分必要的规则分析接口
文件解析管理负责不断读取配置文件,并以规则条目为顶层单元触发顶层插件
不断的分析该规则特征,并在提取到知足触发条件的特征后触发相应的插件.
在解析规则的过程当中也触发了部分待初始化的数据注册的接口,这些接口也就根据配置文件对相应的模块进行了使能和初始化.