snort/templates下
sp_template.h和sp_template.c是开发预处理插件使用的模板
spp_template.h和spp_template.c是开发预处理器使用的模板。
具体怎么在源码下面加载自己想要的插件,可以看http://wenku.baidu.com/link?url=QgklgCAaHYbeR5skIRa6PJSGMb6LZP1AlyRDIKq7cr4fezFgk_vXyNOUB6xmhaV_xjV_SPKB1NVm-I3Z-a857sLR-w_ygSOFOJlKTtUyf9y
在spp_httpinspect.c里面的HttpInspect函数是完成普通的http检测流程的,首先我们得到一个包结构,然后扔它去http检测模块,而http检测模块里面的第一步就是会话检测阶段,这个会话检测阶段非常重要。。在这个函数里面,我们先检测这个包是不是tcp,这是前提条件,也就是assert(IsTCP(p) && p->dsize && p->data);。。然后就是状态方面的预处理,PREPROC_PROFILE_START(hiPerfStats);。。然后我们就进行SnortHttpInspect(pPolicyConfig, p);之后我们就ClearHttpBuffers()。。最后我们通过PERF_PROFILING如果为真,就看我们是否已经调用了http的detect,如果是的话,就把各种状态清空。。这里分析下SnortHttpInspect方法。。
这个方法首先是启动HI_SI_INPUT指针,这个指针是session的检测过程中用来决定是client和server的通信。这也有个好处就是使得http的检测库与snort更加独立了。。
接下来就是流程的走,首先是会话的检测模块,会话模块就是去恢复可能的服务端配置(为这个会话),然后就是http检测模块,这个模块也不是说就是一个检测http的模块,它是一个帮助功能的模块,它帮忙发送数据到可能的检测路径,这些路径有可能是客户端的检测,服务端的检测,或者任意服务端的检测。。然后就是http的标准化模块,经过http的准检测模块,我们的数据已经比较标准,那么在client/server的管道上面,我们接受前一阶段来的数据,然后具体去处理各个管道方向的信息。然后就到了http的detection模块,这个模块在httpinspect的第一轮迭代中是不会被执行的,但是所有http的显著特征的内容一定会被利用到这个模块。。接下来就是一些事件的处理而已。。