Bro指令碼語法5 指令(Directives)

2021-07-24 02:33:41 字數 2637 閱讀 8491

@(教程)[bro]

bro 指令碼語言指令的概念有點類似於c語言中的巨集,他會在指令碼執行之前對指令碼進行處理,比如哪些指令碼會被載入,指令碼中的哪幾行會被執行等等,哪些指令展開後得到特定的字串等等

@debug

todo

@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」. 的必選項

sh 指令碼語法

介紹 1 開頭 程式必須以下面的行開始 必須方在檔案的第一行 bin sh 符號 用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用 bin sh來執行程式。當編寫指令碼完成時,如果要執行該指令碼,還必須使其可執行。要使編寫指令碼可執行 編譯 chmod x filename 這樣...

Shell指令碼語法

定義單變數 p name kang 使用單變數 echo p name js 輸出kang.js echo p name.js 輸出kang.js cp p name.js copy.js 命令1 命令2 如果左邊的 命令1 執行成功,那麼右邊的 命令2 才會被執行。命令1 命令2 與 相反。如果 ...

shell指令碼 語法

條件測試 test 命令test 可以測試乙個條件是否成立,如果測試條件為真,則該命令的exitstatus為0,反之,exitstatus為1。注意 命令 各引數之間應該用空格隔開,以 結尾。但是 不是命令。測試命令 d dir 如果dir存在並且是乙個目錄則為真 f file 如果file存在並...