_nosay 发表于 2017-04-01 02:06

协议精度识别

支持这样的配置:
# 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:}。。

Godbach 发表于 2017-04-01 17:03

回复 1# _nosay

上下文是什么?

_nosay 发表于 2017-04-01 17:31

回复 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: 同一协议的不同识别规则
* []{}: 不同协议
*/

_nosay 发表于 2017-04-01 17:36

回复 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:41

上下文是什么?

nswcfd 发表于 2017-04-06 17:42

本帖最后由 nswcfd 于 2017-04-06 17:46 编辑

===========已删除============
页: [1]
查看完整版本: 协议精度识别