Bro脚本语法5-指令(Directives)

来源:互联网 发布:淘宝如何添加子账号 编辑:程序博客网 时间:2024/04/29 18:08

Bro脚本语法5-指令(Directives)

@(教程)[Bro]

Bro 脚本语言指令的概念有点类似于C语言中的宏,他会在脚本执行之前对脚本进行处理,比如哪些脚本会被加载,脚本中的哪几行会被执行等等,哪些指令展开后得到特定的字符串等等

@DEBUGTODO

@DIR
当前脚本的路径
Example:

print "Directory:", @DIR;

@FILENAME
文件名或当前的脚本

Example:

print "File:", @FILENAME;

@load
从脚本文件搜索路径加载脚本。如果文件名以.bro结尾,可以不加扩展名(不能有空格)

例子中 Bro 会加载脚本 “policy/misc/capture-loss.bro”(BROPATH 环境变量中搜索):

@load policy/misc/capture-loss

如果@load后面是个路径而不是文件名,则会查找路径中的load.bro脚本

这样的话就避免了加载的时候加载不全,也避免了写一大推的@load语句

@load-plugin
通过插件名启用一个插件搜索路径(BRO_PLUGIN_PATH)中的动态插件

@load-plugin Demo::Rot13

默认情况下,bro 会自动启用所有能用的插件,在bro 模式下(bro -b),插件必须通过这个指令手动启动,或者在命令行中指定

bro Demo::Rot13

或者通过设置环境变量 * BRO_PLUGIN_ACTIVATE* 来启用

@load-sigs
类似与load,不过载入的是一个签名(signature)文件,如果文件是以.sig结尾的,可以省略扩展名,
例子中 Bro will 将加载签名文件 “base/protocols/ssl/dpd.sig”:

@load-sigs base/protocols/ssl/dpd

文件的格式参考 Signature Framework 的文档

@unload
指定不载入某个脚本,如果这个脚本已经被载入了,那这个语句将不起作用,如果没被载入,那以后的载入语句也都将不起作用
例子: 如果 “policy/misc/capture-loss.bro” 还没被载入, 那么Bro将不会载入这个脚本

@unload policy/misc/capture-loss

@prefixes
在自动搜索加载脚本的时候指定脚本前缀
指定前缀

@prefixes = cluster

增加一个前缀

@prefixes += cluster-manager

Bro会自动加载相关的脚本
策略是去掉路径名,前面加上一个点,在再前面加上一个prefixes,然后搜索并加载这个文件
比如 bro 加载了一个 local.bro的脚本,同时指定了一个test的prefiex前缀,那么bro将会搜索并加载 test.local.bro的脚本

在命令行中可以通过 -p 来指定

@if
@if
@else
@endif
三个搭配使用,要求是bool表达式
Example:

@if ( ver == 2 )    print "version 2 detected";@endif

@ifdef
不做解释了
Example:

@ifdef ( pi )    print "pi is defined";@endif

@ifndef
Example:

@ifndef ( pi )    print "pi is not defined";@endif

@else
搭配 “@if”, “@ifdef”, or “@ifndef”. 的可选项
Example:

@ifdef ( pi )    print "pi is defined";@else    print "pi is not defined";@endif

@endif
搭配 “@if”, “@ifdef”, or “@ifndef”. 的必选项

0 0
原创粉丝点击