协议精度识别
支持这样的配置:# pkt1: 1234567DE
# pkt2: abcdef1234567\"ABCDEF
# pkt3: xxsss
# pkt4: hello
# pkt5: 123haha~\d2\04\00\00..
# pkt6: xxxhaha~
# pkt7: olddie
{
#u1: N(); u2: S(5, "1234567"), S(0, [~]"\\\"\41\42\43"), S(-2, "EF"), C(5, "BCD"), SL(6,P(u1,0),7), CL(-6,P(u1,7),2)
# xs s shello
# xss s hello
#[~]u1[~]: S(0, [~]"s" "s" [~]"hello")
#pkt1-------------pkt5
#pkt1-------------pkt6------------------pkt7
#pkt5-------------pkt6------------------pkt7
#u1: S(0, "123"); [~]u2: S(3, "haha~"); u3: S(0,"olddie")
# ( ( ( (21 +2)* (17--1))/9 )= 46)
#u1: N(); u2: E(DIV(MUL(ADD(L(u2),2),SUB(17,-1)),L(u1)), 46)
u: E(V(8,2),1234)
}
配置解释:
/*
* 空特征:
* N(),用于报文占位
* 串特征:
* S(a,"b"), !memcmp(a,"b","b"长度)
* C(a,"b"), !strnstr(a,("b","b"长度),a长度)
* SL(a,b,l),!memcmp(a,b,l);
* CL(a,b,l),!strnstr(a,(b,l),a长度)
* 值特征:
* E(a,b),a=b
* NE(a,b), a!=b
* G(a,b),a>b
* GE(a,b), a>=b
* B(a,b),a<b
* BE(a,b), a<=b
* 正则特征:
* R(a,b),a串符合b串描述的正则表达式
* 编码特征:
* D(a,b),a串符合b格式编码
*/// 字符串
/******* "" *******/
// 转义(在字符串内部使用)
/******* \hex、\r、\n、\t、\\、\" *******/
// 十进制数值
/******* n *******/
// 报文内偏移
/******* +n、-n *******/
// 报文命名(n为名字一部分,不表示位置)
/******* un、dn *******/
// 长度
/******* L() *******/
// 计算
/******* ADD(,)、SUB(,)、MUL(,)、DIV(,) *******/
// 取值
/******* V(,) *******/
// 位置
/******* P(,) *******/
// 跳过/范围
/******* 、[~] *******/
/*
* 用于字符串,向后结合: "haha" [~]"xx" "haha"
*
* 用于报文前,表示位置: u, 第7个上行报文
* 默认, u=(前面u/前面d)+1, d=前面u/(前面d+1)
* 用于报文后,表示范围: u[~], 当前上行报文及以后上行报文
* 默认, 仅当前报文内容
*/
已完成{:qq23:}。。
回复 1# _nosay
上下文是什么?
回复 2# Godbach
通过frame-xx()“栈桢”前面的内容,推导后面是什么,递归式的往下识别。// 字符串
/******* "" *******/
// 转义(在字符串内部使用)
/******* \hex、\r、\n、\t、\\、\" *******/
/*
* frame-"xx":
* OP_S_ASSIGN
*"xx"'s address
*/
// 十进制数值
/******* n *******/
/*
* frame-n:
* OP_V_ASSIGN
* n
*/
// 报文内偏移
/******* +n、-n *******/
/*
* frame-offset:
* OP_OFF_FW / OP_OFF_BW
* n
*/
// 报文命名(n为名字一部分,不表示位置)
/******* un、dn *******/
/*
* frame-u|d
* OP_P_ASSIGN
* offset from current rp to dest rp
*/
// 长度
/******* L() *******/
/*
* frame-L():
* OP_FUN_L
* frame-u|d
*/
// 计算
/******* ADD(,)、SUB(,)、MUL(,)、DIV(,) *******/
/*
* frame-calc():
* OP_FUN_ADD / OP_FUN_SUB / OP_FUN_MUL / OP_FUN_DIV
* frame-n / frame-L() / frame-V() / frame-calc()
* frame-n / frame-L() / frame-V() / frame-calc()
*/
// 取值
/******* V(,) *******/
/*
* frame-V():
* OP_FUN_V
* frame-offset / frame-L() / frame-V() / frame-calc() / frame-P()
* frame-n // bits
*/
// 位置
/******* P(,) *******/
/*
* frame-P():
* OP_FUN_P
* frame-u|d
* frame-offset / frame-L() / frame-V() / frame-calc()
*/
// 跳过/范围
/******* 、[~] *******/
/*
* 用于字符串,向后结合: "haha" [~]"xx" "haha"
*
* 用于报文前,表示位置: u, 第7个上行报文
* 默认, u=(前面u/前面d)+1, d=前面u/(前面d+1)
* 用于报文后,表示范围: u[~], 当前上行报文及以后上行报文
* 默认, 仅当前报文内容
*/
// 识别对象(可继续扩展)↑
// 识别规则(可继续扩展)↓
/*
* 空特征:
* N(),用于报文占位
* 串特征:
* S(a,"b"), !memcmp(a,"b","b"长度)
* C(a,"b"), !strnstr(a,("b","b"长度),a长度)
* SL(a,b,l),!memcmp(a,b,l);
* CL(a,b,l),!strnstr(a,(b,l),a长度)
* 值特征:
* E(a,b),a=b
* NE(a,b), a!=b
* G(a,b),a>b
* GE(a,b), a>=b
* B(a,b),a<b
* BE(a,b), a<=b
* 正则特征:
* R(a,b),a串符合b串描述的正则表达式
* 编码特征:
* D(a,b),a串符合b格式编码
*/
/*
* frame-N():
* no frame
*
* frame-S(): // string,support /[~]
* frame-C(): // contain, support /[~]
* frame-R(): // regex
* frame-D(): // decode
* OP_FUN_S / OP_FUN_C / OP_FUN_R / OP_FUN_D
* frame-offset / frame-L() / frame-V() / frame-calc() / frame-P()
* frame-"xx"
*
* frame-SL():
* frame-CL():
* OP_FUN_SL / OP_FUN_CL
* frame-offset / frame-L() / frame-V() / frame-calc() / frame-P()
* frame-offset / frame-L() / frame-V() / frame-calc() / frame-P()
* frame-n / frame-L() / frame-V() / frame-calc()
*
* frame-E()
* frame-NE()
* frame-G()
* frame-GE()
* frame-B()
* frame-BE()
* OP_FUN_E / OP_FUN_NE / OP_FUN_G / OP_FUN_GE / OP_FUN_B / OP_FUN_BE
* frame-n / frame-L() / frame-V() / frame-calc()
* frame-n / frame-L() / frame-V() / frame-calc()
*/
// 分隔符
/*
* ,: 同一报文中的不同特征
* ;: 不同报文的特征
* \n: 同一协议的不同识别规则
* []{}: 不同协议
*/
回复 2# Godbach
通过frame-xx()“桢”前面的内容,推导后面是什么内容,递归式的往下识别:// 字符串
/******* "" *******/
// 转义(在字符串内部使用)
/******* \hex、\r、\n、\t、\\、\" *******/
/*
* frame-"xx":
* OP_S_ASSIGN
*"xx"'s address
*/
// 十进制数值
/******* n *******/
/*
* frame-n:
* OP_V_ASSIGN
* n
*/
// 报文内偏移
/******* +n、-n *******/
/*
* frame-offset:
* OP_OFF_FW / OP_OFF_BW
* n
*/
// 报文命名(n为名字一部分,不表示位置)
/******* un、dn *******/
/*
* frame-u|d
* OP_P_ASSIGN
* offset from current rp to dest rp
*/
// 长度
/******* L() *******/
/*
* frame-L():
* OP_FUN_L
* frame-u|d
*/
// 计算
/******* ADD(,)、SUB(,)、MUL(,)、DIV(,) *******/
/*
* frame-calc():
* OP_FUN_ADD / OP_FUN_SUB / OP_FUN_MUL / OP_FUN_DIV
* frame-n / frame-L() / frame-V() / frame-calc()
* frame-n / frame-L() / frame-V() / frame-calc()
*/
// 取值
/******* V(,) *******/
/*
* frame-V():
* OP_FUN_V
* frame-offset / frame-L() / frame-V() / frame-calc() / frame-P()
* frame-n // bits
*/
// 位置
/******* P(,) *******/
/*
* frame-P():
* OP_FUN_P
* frame-u|d
* frame-offset / frame-L() / frame-V() / frame-calc()
*/
// 跳过/范围
/******* 、[~] *******/
/*
* 用于字符串,向后结合: "haha" [~]"xx" "haha"
*
* 用于报文前,表示位置: u, 第7个上行报文
* 默认, u=(前面u/前面d)+1, d=前面u/(前面d+1)
* 用于报文后,表示范围: u[~], 当前上行报文及以后上行报文
* 默认, 仅当前报文内容
*/
// 识别对象(可继续扩展)↑
// 识别规则(可继续扩展)↓
/*
* 空特征:
* N(),用于报文占位
* 串特征:
* S(a,"b"), !memcmp(a,"b","b"长度)
* C(a,"b"), !strnstr(a,("b","b"长度),a长度)
* SL(a,b,l),!memcmp(a,b,l);
* CL(a,b,l),!strnstr(a,(b,l),a长度)
* 值特征:
* E(a,b),a=b
* NE(a,b), a!=b
* G(a,b),a>b
* GE(a,b), a>=b
* B(a,b),a<b
* BE(a,b), a<=b
* 正则特征:
* R(a,b),a串符合b串描述的正则表达式
* 编码特征:
* D(a,b),a串符合b格式编码
*/
/*
* frame-N():
* no frame
*
* frame-S(): // string,support /[~]
* frame-C(): // contain, support /[~]
* frame-R(): // regex
* frame-D(): // decode
* OP_FUN_S / OP_FUN_C / OP_FUN_R / OP_FUN_D
* frame-offset / frame-L() / frame-V() / frame-calc() / frame-P()
* frame-"xx"
*
* frame-SL():
* frame-CL():
* OP_FUN_SL / OP_FUN_CL
* frame-offset / frame-L() / frame-V() / frame-calc() / frame-P()
* frame-offset / frame-L() / frame-V() / frame-calc() / frame-P()
* frame-n / frame-L() / frame-V() / frame-calc()
*
* frame-E()
* frame-NE()
* frame-G()
* frame-GE()
* frame-B()
* frame-BE()
* OP_FUN_E / OP_FUN_NE / OP_FUN_G / OP_FUN_GE / OP_FUN_B / OP_FUN_BE
* frame-n / frame-L() / frame-V() / frame-calc()
* frame-n / frame-L() / frame-V() / frame-calc()
*/
// 分隔符
/*
* , 同一报文中的不同特征
* ; 不同报文的特征
* \n 同一协议的不同识别规则
* []{}不同协议
*/
上下文是什么? 本帖最后由 nswcfd 于 2017-04-06 17:46 编辑
===========已删除============
页:
[1]