honeydの設定
honeydの設定ファイルに関する簡易BNFを作る。
長くなるので、「続きを読む」を使ってみる。
以下、前提条件 A::=B はAはBによって定義されていることを示す。 (A) はAをくくったもので、数学的な優先順位を表す。 (A)? はAを0〜1回、繰り返す事を表す。 (A)* はAを0〜任意の回数、繰り返す事を表す。 A | B はAかBかのいずれかを表す。 ${A} は定義を表す。 <A> は中に書かれた説明Aを表す。 通常の文字 は文字列を表す。 以下、補助的な構文 ${NUMBER} ::= <整数> ${CMD_STRING}::= <コマンド名> ( <引数> )* ${INTERFACE} ::= <インターフェースの名前> ${OPTION} ::= option <プラグインのオプションなどの文字列> ${ADDR} ::= ${NUMBER}.${NUMBER}.${NUMBER}.${NUMBER} ${NETWORK} ::= ${NUMBER}.${NUMBER}.${NUMBER}.${NUMBER}/${NUMBER} ${OPTIONS} ::= latency ${NUMBER}ms | loss ( 1 | 0.${NUMBER} ) | bandwidth ${NUMBER} ( Mbps | Kbps ) | drop between ${NUMBER} ms - ${NUMBER} ms ${PROTOCOL} ::= tcp | udp | icmp ${ACTION} ::= ( tarpit )? ( block | open | reset | ${CMD_STRING} | | internal ${CMD_STRING} | proxy ${ADDR}:${NUMBER} ) ${OS_TYPE} ::= "Cisco 1601R router running IOS 12.1(5)" | "Microsoft Windows NT 4.0 SP3" | "Microsoft Windows XP Professional SP1" | "IBM AIX 4.2" | random ${CONDITION}::= ( source os = ${CMD_STRING} | source ip = ${ADDR} | source ip = ${NETWORK} | time between timecondition ${NUMBER} - ${NUMBER} ) 以下、メインの構文 ${CONFIG} ::= ${CREATE} | ${ADD} | ${DELETE} | ${BIND} | ${DHCP} | ${CLONE} | ${SET} | ${ANNOTATE} | ${ROUTE} ( config )? | ${OPTION} ${CREATE} ::= create ( default | ( ( dynamic )? ${TEMPLATE} ) ) ${ADD} ::= add ${TEMPLATE} ( ( ${PROTOCOL} port ${NUMBER} ${ACTION} ) | ( subsystem ${CMD_STRING} ( shared )? ) | ( use ${TEMPLATE} if ${CONDITION} ) ) ${DELETE} ::= delete ${TEMPLATE} ( ${PROTOCOL} port ${NUMBER} )? ${BIND} ::= bind ( ( ${ADDR} ( ${TEMPLATE} | ( to ${INTERFACE} ) ) ) | ( ${CONDITION} ${ADDR} ${TEMPLATE} ) ) ${DHCP} ::= dhcp ${TEMPLATE} on ${INTERFACE} ( ethernet ${CMD_STRING} )? ${CLONE} ::= clone ${TEMPLATE} ${TEMPLATE} ${SET} ::= set ( ( ${TEMPLATE} ( ( default ${PROTOCOL} action ${ACTION} ) | ( personality ${OS_TYPE} ) | ( ethernet ${CMD_STRING} ) | ( uptime ${NUMBER} ) | ( droprate in ${NUMBER} ) | ( uid ${NUMBER} ( gid ${NUMBER} )? ) | ( maxfds ${NUMBER} ) ) ) | ( ${ADDR} uptime ${NUMBER} ) ) ${ANNOTATE} ::= annotate ${OS_TYPE} ( ( ( no )? finscan ) | ( fragment ( drop | old | new ) ) ) ${ROUTE} ::= route ( ( entry ${ADDR} ( network ${NETWORK} )? ) | ( ${ADDR} ( ( ( link | unreach ) ${NETWORK} ) | ( add net ${NETWORK} tunnel ${ADDR}(src) ${ADDR}(dst) ) | ( add net ${NETWORK} ${ADDR} ${OPTIONS} ) ) ) )