文章结构
- 1,预处理插件开发注意
- 2,开发步骤
- 3,DPX介绍
- 4,附录:代码
- 5,参考文献
预处理器开发注意
Preprocessors perform some function once for each packet. This is different from detection plugins, which are accessed depending on the standard rules. When adding a plugin to the system, be sure to add the “Setup” function to the InitPreprocessors() function call in plugbase.c!
注意:本文的Snort版本是2.9.13。
预处理器对每一个数据包只执行一次,它不同于检测插件(检测插件的获取依赖于基本规则 rules).当我们给Snort添加预处理插件的时候,请务必将"Setup"函数添加到plugbase.c源文件中的**InitPreprocessors()**函数中去。
注意:上面是Snort源文件中spp_template.c (预处理器模板)中的注释,这个注释的版本没有及时更新,原文中的InitPreprocessors( ) 函数已经被替换成了 RegistPreprocessors( )
开发步骤
编写过程简述:
- 根据spp_template.c里面的内容修改spp_template.c和spp_template.h
(1) 将这两个文件名称修改为spp_hello.c和spp_hello.h - 修改spp_hello.c函数
(1) SetupHello
(2) HelloFunction - 修改spp_hello.h函数
(1) 声明SetupHello - 修改plugbase.c函数
(1) #include preprocessors/spp_hello.h
(2) RegistProcesser函数中调用SetupHello - 修改preprocids.h
(1) #define PP_MAX 38
(2) #define PP_HELLO 37
对新增的解码类型自己定义的标志 - 修改Makefile.am,并在根目录运行automake命令
- make, make install 直接覆盖已安装的snort
- 修改/etc/snort/snort.conf
- 测试:snort -dev -c /etc/snort/snort.conf
过程中出现的问题:
1- aumake版本的确定
a) 查看源代码目录下的文件Makefile
Makefile.in generated by automake 1.16.1 from Makefile.am
b) 版本为automake1.16.1
2- 预处理插件被加载而且初始化完成,但是预处理插件主函数不工作
a) 原因是新版本的Snort新增加了session_api->enable_preproc_all_ports
加入这一行代码后,预处理器运行正常
3-安装完之后需要配置Snort
每个预处理器都在snort.conf中进行单独配置,如果不配置就不能使用
preprocessor Hello
4-关于Snort的安装
请参考Snort官网给出的学习文档(很好用哦)或者网上的一些参考资料
( p.s.这里就是懒一下,或许我以后会补上来)
5-关于spp_template文件的一些说明
详情请参考spp_template.c中的注释。
由于这里只是实现了比较简单地在控制台打印语句的HelloWolrd程序,所以像参数鸡西函数ParseTemplateArgs等等就没有使用。
改名:
原名 | 新名 | 修改 |
---|---|---|
spp_tempalte.h | spp_hello.h | 添加SetupHello函数的声明 |
spp_tempalte.c | spp_hello.c | 略 |
TemplateInit | HelloInit | 添加初始化操作,通过调用AddFuncToPreprocList 将PreprocHello、PreprocCleanExitHello、PreprocRestartHello注册给系统 |
SetupTemplate | SetupHello | 调用RegisterPreprocessor 将此插件的初始化函数HelloInit注册给系统 |
ParseTemplateArgs | xxxx | 添加对参数的处理操作 |
PreprocFunciton | HelloFunction | 加入预处理逻辑代码 |
PreproCleanExitFunction | xxxx | 添加插件退出时的清理操作 |
PreproRestartFunction | xxxx | 添加插件重启时的操作。(不常用,空操作) |