基于索引分簇的网络协议特征匹配方法与流程

文档序号:14660144发布日期:2018-06-12 17:36阅读:来源:国知局
基于索引分簇的网络协议特征匹配方法与流程

技术特征:

1.基于索引分簇的网络协议特征匹配方法,其特征在于包含以下步骤:

第一步,预处理,流程如下:

步骤1.1建立深度报文检查索引分簇;输入协议识别规则集合R,从协议识别规则的载荷特征中提取深度报文检查字符串集合D,针对每条规则按照长度优先原则筛选深度报文检查字符串作为索引要素,建立深度报文检查索引分簇表A,记录规则处理状态B[N]及未处理规则数Y,Y为整数;

其中变量定义如下:

协议识别规则集合R,R中包含N条协议规则,N为整数;记Ri表示第i条协议规则,Ri包含Mi个载荷特征,ri,j为Ri第j个载荷特征,1≤i≤N,1≤j≤Mi,i、j、Mi均为整数;载荷特征包含字符串和固定位置两个元素,记ri,j=<string[K],offset>,其中,string[K]表示长度为K的字符串,令stringk表示ri,j中第k个字符,1≤k≤K,k、K均为整数;令offset表示固定位置要求,若offset等于-1,则ri,j为浮动位置串;通过ri,j.string[K]访问ri,j中的string[K],通过ri,j.offset访问ri,j中的offset;

深度报文检查字符串集合D初始值为空,D中不包含重复字符串;

载荷特征映射表S[N][M]为N行M列矩阵,S[N][M]初始值为全0,Si,j表示协议规则Ri的载荷特征ri,j在集合D中的编号,若Si,j等于0,说明ri,j的字符串ri,j.string[K]不属于集合D;

深度报文检查索引分簇表A,Ad表示D中第d个字符串的描述信息,d为整数,Ad包含4部分信息,记Ad=<float,location[P],index,rule[L]>,其中:

●float为浮动位置标记,若float等于1,表示Ad字符串属于浮动位置载荷特征,通过Ad.float访问Ad的float元素;

●location[P]表示长度为P的固定位置向量,若locationp等于1,说明Ad来自某个固定位置载荷特征,且该固定位置特征载荷的offset等于p,1≤p≤P,p、P均为整数,通过Ad.locationp访问Ad的locationp元素;

●index为索引标记,若index等于1,表示Ad为某协议规则的索引要素,通过Ad.index访问Ad的index元素;

●rule[L]为长度为L的向量,其中存储Ad作为索引要素的协议规则的编号,通过Ad.rule[L]访问Ad的rule[L]元素,通过Ad.rulel访问Ad的rulel元素,1≤l≤L,l为整数;

固定位置索引分簇表F,Ff表示第f个固定位置索引,包含2部分信息,记Ff=<offset,rule[ROW][L]>,f为整数,其中:

●offset表示Ff所在的偏移位置,采用索引偏移位置为offset的字节为索引,通过Ff.offset访问Ff的offset元素;

●rule[Row][L]为ROW行L列矩阵,存储对应该字节的ROW种取值的协议识别规则编号,其中ruler,s表示编号等于ruler,s的协议规则包含某个固定位置特征,该固定位置特征要求偏移位置为offset的字节取值等于r,1≤r≤256,1≤s≤L,r、s均为整数,通过Ff.rule[ROW][L]访问Ff的rule[ROW][L]元素,ROW≥256;

协议识别规则处理状态向量B[N],初始值为全0,Bi标记第i条协议识别规则Ri的处理状态,若Bi等于0,表明该规则尚未处理,若Bi等于1,表明该规则已完成索引分簇;

一条规则最多包含M个载荷特征,一个索引要素最多关联L条规则,报文数据载荷的最大长度为P字节,M、L、P均为整数;

步骤1.2建立固定位置索引分簇;输入协议识别规则集合R,针对未处理的协议识别规则,按照信息熵评估结果选择固定位置载荷作为索引要素,建立固定位置索引分簇表F,记录规则处理状态B[N]及未处理规则数Y;

第二步,深度报文检查,流程如下:向深度报文检查引擎输入深度报文检查字符串集合D、网络报文;深度报文检查引擎遍历检查网络报文的报文载荷DATA中是否包含D中字符串,输出命中结果Result,Result中包含rnum个命中结果,其中第ci个命中结果Resultci=<offset,id>,分别通过Resultci.offset、Resultci.id访问offset和id元素,其中Resultci.offset表示命中位置,Resultci.id表示命中的字符串编号;Result按照offset从小到大排序,ci、rnum均为正整数,1≤ci≤rnum;

第三步,规则匹配,流程如下:

步骤3.1深度报文检查结果重构;根据深度报文检查索引分簇表A,将命中结果Result筛选和重构,提取命中结果中包含的深度报文检查索引要素编号,构成索引要素命中队列HIT,及字符串命中明细表C,其中HIThi表示第hi个索引要素编号,Cck表示集合D中第ck个字符串的命中位置列表,采用链表结构存储,Cck,cz表示链表Cck中存储的第cz个命中位置,hi、ck、cz均为正整数;

步骤3.2深度报文检查索引类规则匹配;根据索引要素命中队列HIT中记录的字符串编号遍历相关规则;

步骤3.3固定位置类索引规则匹配;根据固定位置索引分簇表F遍历相关规则,输出命中的协议规则编号,结束。

2.如权利要求1所述的基于索引分簇的网络协议特征匹配方法,其特征在于所述步骤1.1建立深度报文检查索引分簇,包括以下步骤:

1.1.1遍历协议识别规则的载荷特征,将浮动位置特征的字符串及固定位置长度大于阈值W的字符串加入集合D,得到集合D,W为正整数;具体步骤为:

1.1.1.1清空集合D;

1.1.1.2令循环变量ii=1;

1.1.1.3读取协议规则Rii,提取载荷特征个数Mii;遍历Rii的载荷特征,将浮动位置特征的字符串及固定位置长度大于W的字符串加入集合D;流程如下:

1.1.1.3.1循环变量jj置为1;

1.1.1.3.2读取Rii的第jj个载荷特征rii,jj=<string[K],offset>;

1.1.1.3.3如果offset等于-1,说明rii,jj为浮动位置串,则将rii,jj.string[K]添加到D,跳转至1.1.1.3.5;否则,offset不等于-1,说明rii,jj为固定位置特征字符串,进入1.1.1.3.4;

1.1.1.3.4如果K大于W,则将rii,jj.string[K]添加到D;

1.1.1.3.5循环变量jj增1;

1.1.1.3.6如果循环变量jj不等于Mii+1,跳转至1.1.1.3.2;否则,进入到1.1.1.4;

1.1.1.4循环变量ii增1;

1.1.1.5如果循环变量ii不等于N+1,跳转至1.1.1.3;否则,进入1.1.2;

1.1.2遍历协议识别规则的载荷特征,若载荷特征的字符串属于集合D,则填写载荷特征映射表S[N][M]及深度报文检查索引分簇表A;协议识别规则Ri包含Mi个载荷特征,记其中Mi’个载荷特征的字符串属于集合D,Mi’为整数,Mi’≤Mi;若Mi’≥1,则规则Ri属于深度报文检查索引分簇,将规则Ri的Mi’个载荷特征中的最长字符串作为Ri的索引要素;流程如下:

1.1.2.1清空载荷特征映射表S[N][M]、深度报文检查索引分簇表A、协议识别规则处理状态向量B[N],令Y=N;

1.1.2.2令循环变量iii=1;

1.1.2.3读取协议规则Riii,提取载荷特征个数Miii;遍历Riii的载荷特征,若载荷特征的字符串属于集合D,则标记S[N][M]及A,记录属于集合D的最长字串编号max_id及长度max_len,max_id、max_len为正整数;流程如下:

1.1.2.3.1max_len置为-1;

1.1.2.3.2循环变量jjj置为1;

1.1.2.3.3读取Riii的第jjj个载荷特征riii,jjj=<string[K],offset>;

1.1.2.3.4在集合D中查找字符串riii,jjj.string[K],若找不到,说明字符串riii,jjj.string[K]不属于集合D,跳转至1.1.2.3.9;若找到,说明字符串riii,jjj.string[K]属于集合D,进入1.1.2.3.5;

1.1.2.3.5令临时变量id记录字符串riii,jjj.string[K]在集合D中编号;

1.1.2.3.6填写协议识别规则载荷特征映射表S[N][M],方法是:Si,j=id;

1.1.2.3.7如果riii,jjj.string[K]的长度K大于max_len,则更新max_id、max_len的值:max_len=K,max_id=id;

1.1.2.3.8若riii,jjj.offset等于-1,记录D中编号为id的字符串属于浮动位置特征,方法是:Aid.float=1;若riii,jjj.offset不等于-1,记录该固定位置特征对D中编号为id的字符串的位置要求,方法是:令临时变量kk=riii,jjj.offset,Aid.locationkk=1;

1.1.2.3.9循环变量jjj增1;

1.1.2.3.10如果循环变量jjj不等于Miii+1,跳转至1.1.2.3.3;否则,进入1.1.2.4;

1.1.2.4如果max_len等于-1,转1.1.2.7;否则,进入1.1.2.5;

1.1.2.5选择集合D中编号为max_id的字符串作为规则Ri的索引要素,将规则编号iii插入至Amax_id.rule[L],方法是:令变量kkk从1递增,若首次出现Amax_id.rulekkk等于零,则Amax_id.rulekkk置为iii,即完成将规则编号iii插入至Amax_id.rule[L],进入1.1.2.6;

1.1.2.6至此规则Riii完成深度报文检查索引分簇,更新Biii、Y的值:Biii=1,Y=Y-1;

1.1.2.7循环变量iii增1;

1.1.2.8如果循环变量iii不等于N+1,跳转至1.1.2.3;否则,结束。

3.如权利要求2所述的基于索引分簇的网络协议特征匹配方法,其特征在于所述1.1.1中定义阈值W优选为3。

4.如权利要求1所述的基于索引分簇的网络协议特征匹配方法,其特征在于所述步骤1.2建立固定位置引分簇,包括以下步骤:

1.2.1清空固定位置索引分簇表F,固定位置索引要素个数fk置为0;

1.2.2遍历报文载荷位置,统计未处理的协议识别规则在载荷位置上的取值分布并存储在整数向量V[ROW]中,计算信息熵H,记录最大熵值max_H及固定位置索引点max_offset,H、max_H为实数,max_offset为整数;流程如下:

1.2.2.1令max_H置为0,清空V[ROW];

1.2.2.2循环变量g置为0;

1.2.2.3循环变量fi置为0;

1.2.2.4如果Bfi不等于0,跳转至1.2.2.6;否则,Bfi等于0,进入1.2.2.5;

1.2.2.5读取协议规则Rfi,提取载荷特征个数Mfi;遍历Rfi的载荷特征,查看是否载荷偏移位置g有取值要求;流程如下:

1.2.2.5.1令循环变量fj=1;

1.2.2.5.2读取Rfi的第fj个载荷特征rfi,fj=<string[K],offset>;

1.2.2.5.3记临时变量如果rfi,fj.offset≤g≤K+rfi,fj.offset,说明rfi,fj要求报文载荷在偏移位置g上的取值等于fs,令Vfs=Vfs+1,转1.2.2.6;否则,进入1.2.2.5.4;

1.2.2.5.4循环变量fj增1;

1.2.2.5.5如果循环变量fj不等于Mfi+1,跳转至1.2.2.5.2;否则,进入1.2.2.6

1.2.2.6循环变量fi增1;

1.2.2.7如果循环变量fi不等于N+1,跳转至1.2.2.4;否则,进入1.2.2.8;

1.2.2.8根据V[ROW]计算信息熵H,流程如下:

1.2.2.8.1H置为0,临时变量total置为0;

1.2.2.8.2循环变量v置为0;

1.2.2.8.3total值增加Vv,即total=total+Vv;

1.2.2.8.4如果Vv>0,则更新H的值为H-Vv*log2(V),即H=H-Vv*log2(Vv);

1.2.2.8.5循环变量v增1;

1.2.2.8.6如果v不等于ROW+1,跳转至1.2.2.8.3;否则,进入1.2.2.8.7;

1.2.2.8.7H=H/total;

1.2.2.8.8H=H+log2(total);

1.2.2.8.9若H>max_H,更新max_H和max_offset:max_H=H,max_offset=g;

1.2.2.9循环变量g增1;

1.2.2.10如果循环变量g不等于P+1,跳转至1.2.2.3;否则,进入1.2.3;

1.2.3采用固定位置索引点max_offset创建新的固定位置索引要素,流程如下:

1.2.3.1fk增1;

1.2.3.2Ffk.offset=max_offset,清空Ffk.rule[ROW][L];

1.2.3.3令循环变量ti=0;

1.2.3.4如果Bti不等于0,跳转至1.2.2.6;否则,进入1.2.3.5;

1.2.3.5读取协议规则Rti,提取载荷特征个数Mti;遍历Rti的载荷特征,查看是否载荷偏移位置max_offset有取值要求,流程如下:

1.2.3.5.1令循环变量tj=1;

1.2.3.5.2读取Rti的第tj个载荷特征rti,tj=<string[K],offset>;

1.2.3.5.3记临时变量若rti,tj.offset≤max_offset≤K+rti,tj.offset,说明rti,tj要求报文载荷在偏移位置g上的取值等于ts,则将规则编号插入向量Ffk.rule[ROW][L]中,标记规则Rti完成固定位置索引分簇,方法是:Bti=1,Y=Y-1;转1.2.3.6;

1.2.3.5.4循环变量tj=tj+1;

1.2.3.5.5如果循环变量tj不等于Mti+1,跳转至1.2.3.5.2;否则,进入1.2.3.6;

1.2.3.6循环变量ti=ti+1;

1.2.3.7如果循环变量ti不等于N+1,跳转至1.2.3.4;否则,进入1.2.4;

1.2.4如果Y大于0,说明仍有未处理的协议识别规则,跳转至1.2.2;否则,Y=0,说明所有协议识别规则均已处理完,结束。

5.如权利要求4所述的基于索引分簇的网络协议特征匹配方法,其特征在于所述1.2.3.5.3中将规则编号插入向量Ffk.rule[ROW][L]中,方法是:令变量tz从1递增,首次出现Ffk.rulets,tz等于零时,则令Ffk.rulets,tz=ti。

6.如权利要求1所述的基于索引分簇的网络协议特征匹配方法,其特征在于所述第二步中采用的深度报文检查引擎采用Netlogic 2008或AC算法。

7.如权利要求1所述的基于索引分簇的网络协议特征匹配方法,其特征在于所述步骤3.1深度报文检查结果重构,包括以下步骤:

3.1.1清空索引要素命中队列HIT及字串命中明细表C;

3.1.2令临时变量rnum记录命中结果Result中元素个数;

3.1.3令循环变量ci=1;

3.1.4读取命中结果Resultci,令临时变量cj=Resultci.offset,临时变量ck=Resultci.id;

3.1.5令临时变量insert=0,表示该命中结果不插入链表Cci;

3.1.6如果Ack.locationcj等于1,则将Resultci.offset插入链表Cck,同时令临时变量insert=1;

3.1.7如果Ack.float等于1,且链表Cck为空,则将Resultci.offset插入链表Cck,同时令临时变量insert=1;

3.1.8如果Ack.index等于1,说明字符串ck是索引要素,且临时变量insert等于1,则将ck加入索引要素命中队列HIT;

3.1.9循环变量ci=ci+1;

3.1.10如果循环变量ci不等于rnum+1,跳转至3.1.4;否则,结束。

8.如权利要求1所述的基于索引分簇的网络协议特征匹配方法,其特征在于所述步骤3.2深度报文检查索引类规则匹配,包括以下步骤:

3.2.1令临时变量hnum记录索引要素命中队列HIT中元素个数;

3.2.2令循环变量hi=1;

3.2.3读取HIThi,为便于表示,令临时变量hs=HIThi;

3.2.4令循环变量hz=1;

3.2.5如果Ahs.rulehz等于0,说明HIThi索引的规则遍历结束,跳转至3.2.8;否则,进入3.2.6;

3.2.6令临时变量hk=Ahs.rulehz,读取规则Rhk,遍历Rhk的载荷特征进行匹配验证,具体步骤包括:

3.2.6.1令循环变量hj=0;

3.2.6.2读取Rhk的第hj个载荷特征rhk,hj=<string[K],offset>;

3.2.6.3读取载荷特征映射表S[N][M],令临时变量hss=Shk,hj,如果hss不等于0,说明该载荷特征的特征串已加入集合D,可从字符串命中明细表C查询命中结果,跳转至3.2.6.5;否则,进入3.2.6.4;

3.2.6.4从报文载荷DATA的偏移位置offset处读取K个字符,与rhk,hj.string[K]进行比较,若不相等,说明匹配失败,跳转至3.2.6.8;否则,进入3.2.6.5;

3.2.6.5读取字符串命中明细表C,若链表Chss中不包含rhk,hj.offset,说明匹配失败,跳转至3.2.6.9;否则,进入3.2.6.6;

3.2.6.6循环变量hj=hj+1;

3.2.6.7如果循环变量hj不等于Mhk+1,跳转至3.2.6.2;否则,进入3.2.6.8;

3.2.6.8规则Rhk命中成功,输出规则编号hk,转3.2.7;

3.2.6.9规则Rhk命中失败,进入3.2.7;

3.2.7循环变量hz=hz+1,若hz不等于L+1,转3.2.5;否则,进入3.2.8;

3.2.8循环变量hi=hi+1;

3.2.9如果循环变量hi不等于hnum+1,跳转至3.2.3;否则,结束。

9.如权利要求1所述的基于索引分簇的网络协议特征匹配方法,其特征在于所述步骤3.3固定位置类索引规则匹配,包括以下步骤:

3.3.1令临时变量fnum记录固定位置索引分簇表F的元素个数;

3.3.2令循环变量fii=1;

3.3.3读取Ffii,令临时变量fs=Ffii.offset,令fq记录报文载荷DATA偏移位置fs处的取值,即fq=DATAfs;

3.3.4令循环变量fz=0;

3.3.5从Ffii关联的规则表Ffii.rule[ROW][L]查询Ffii.rulefq,fz,令临时变量fk=Ffii.rulefq,fz;若fk等于0,说明Ffii索引的规则遍历结束,跳转至3.3.7;否则,进入3.3.6;

3.3.6读取规则Rfk,遍历Rfk的载荷特征进行匹配验证,流程如下:

3.3.6.1令循环变量rjj=0;

3.3.6.2读取Rfk的第rjj个载荷特征rfii,rjj=<string[K],offset>;

3.3.6.3从报文载荷DATA的偏移位置offset处读取K个字符,与rfii,rjj.string[K]进行比较,若不相等,说明匹配失败,跳转至3.3.6.7;否则,进入3.3.6.4;

3.3.6.4循环变量rjj=rjj+1;

3.3.6.5如果循环变量rjj不等于Mrii+1,跳转至3.2.6.2;否则,进入3.3.6.6;

3.3.6.6规则Rfk命中成功,返回规则编号fk,跳转至3.3.7;

3.3.6.7规则Rfk命中失败,进入3.3.7;

3.3.7循环变量fii=fii+1;

3.3.8如果循环变量fii不等于fnum+1,跳转至3.3.2;否则,结束。

10.如权利要求1-9中任意一项所述的基于索引分簇的网络协议特征匹配方法,其特征在于,由于一共有256个ASCII字符,所述ROW优选为256。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1