发明内容
本发明的目的在于克服现有技术中所存在的扩展性和处理效率不能兼顾的不足,提供一种网络数据包协议识别方法,该方法不但具有较好的扩展性,还具有较高的处理效率。本发明的另一目的是提供一种网络数据包协议识别系统。
为了实现上述发明目的,本发明提供了以下技术方案:
一种网络数据包协议识别方法,包括协议配置步骤和数据包协议识别步骤,其中,所述协议配置步骤包括:
A.输入协议的协议特征信息,并存储;
B.根据协议特征信息建立协议树;
C.根据协议特征信息建立特征值表和判断逻辑;
所述数据包协议识别步骤包括:
a.获取待识别的数据包;
b.根据获取数据包的物理介质,选取用于识别数据包协议的协议树;
c.从数据包中读取用于识别数据包协议的关键字的数值,并将读取到的关键字的数值与特征值表和判断逻辑进行比对,识别数据包协议。
根据本发明实施例,步骤A中所述协议特征信息包括:所述协议的名称、所述协议的下级协议名称、所述协议的关键字、特征值、关键字定义和比较方式,所述比较方式包括大于、等于、小于。
根据本发明实施例,所述步骤B中建立协议树的方法是:根据协议特征信息,将一个协议作为一个协议节点,所有具有相同下级协议的协议组成一个节点层,再按照协议的上、下级关系,连接所有协议节点组成协议树,组成同一个节点层的协议节点位于协议树的同一个节点层,所述协议树的入口为物理介质。
根据本发明实施例,步骤C中所述建立特征值表的方法是:遍历存储的所有协议的协议特征信息,选取所有比较方式为等于的协议,一个关键字建立一张特征值表,特征值表中记录该关键字的所有特征值及各特征值对应的协议名称;所述判断逻辑由所有比较方式为大于或小于的协议的名称及该协议的判断条件构成。
根据本发明实施例,所述协议配置步骤中还包括步骤D.将所有特征值表和判断逻辑组织成执行代码,然后对执行代码进编译,生成识别引擎。
根据本发明实施例,所述步骤c从数据包中读取用于识别数据包协议的关键字的数值,并将读取到的关键字的数值与特征值表和判断逻辑进行比对,识别数据包协议包括:
c1.进入协议树的根节点;
c2.从数据包中读取当前节点层中所有的协议节点的关键字在数据包中的数值;
c3.查询当前节点层中所有的协议节点的关键字的特征值表,如果从数据包中读取到的关键字的数值与特征值表中的某个特征值相同,则得出当前协议节点的协议为特征值表中该特征值对应的协议,并进入步骤c5,如果与特征值表中的所有特征值均不同则进入步骤c4;
c4.执行判断逻辑,如果读取的关键字的数值满足判断逻辑中的某判断条件,则得出当前节点协议为该判断条件对应的协议,并进入步骤b5,如果不满足判断逻辑中的任何判断条件,则输出识别结果;
c5.进入协议树中当前节点层的下一个节点层,循环步骤c2~c4。
本发明还提供了一种网络数据包协议识别系统,包括协议配置装置和数据包协议识别装置,其中,所述协议配置装置包括:
协议特征存储单元,用于存储协议的协议特征信息;
协议树生成单元,用于根据协议特征信息生成协议树;
特征值表和判断逻辑生成单元,用于根据协议特征信息,生成识别数据包协议的特征值表和判断逻辑;
所述数据包协议识别装置包括:
数据包采集单元,用于采集待识别的数据包;
协议树选择单元,用于根据获取数据包的物理介质,选取识别数据包协议的协议树;
数据包协议识别单元,用于从待识别数据包中读取关键字的数值,并将读取到的关键字的数值与特征值表和判断逻辑进行比对,识别数据包协议。
根据本发明实施例,所述协议特征信息包括:所述协议的名称、所述协议的下级协议名称、所述协议的关键字、特征值、关键字定义和比较方式,所述比较方式包括大于、等于、小于。
根据本发明实施例,所述协议树生成单元将将一个协议作为一个协议节点,所有具有相同下级协议的协议组成一个节点层,再按照协议的上、下级关系,连接所有协议节点组成协议树,组成同一个节点层的协议节点位于协议树的同一个节点层,所述协议树的入口为物理介质。
根据本发明实施例,所述特征值表由比较方式为等于的协议的名称和该协议的特征值构成;所述判断逻辑由比较方式为大于或小于的协议的名称及该协议的判断条件构成。
根据本发明实施例,所述数据包协议识别单元包括:关键字采集模块,用于从数据包中读取协议树中各协议节点的关键字在数据包中的数值;协议识别模块,用于通过查询特征值表和执行判断逻辑,识别数据包协议:查询特征值表,如果从数据包中读取的关键字的数值与特征值表中某个特征值相同,则得出协议节点的协议为特征值表中该特征值对应的协议,如果读取的关键字的数值与特征值表中任何特征值都不同则执行判断逻辑,如果从数据包中读取的关键字的数值满足判断逻辑中的某个判断条件,则得出协议节点的协议为该判断条件对应的协议,如果不满足判断逻辑中的任何判断条件,则输出识别结果。
与现有技术相比,本发明的有益效果:
1、本发明网络数据包协议识别系统及方法,根据所有协议的协议特征信息建立特征值表和判断逻辑,通过查询特征值表和执行判断逻辑,识别数据包所使用的协议。通过一次查表即可以快速的找出所使用的协议,代替了传统数据包协议识别方法中每个协议的比对操作,将识别效率从O(n)提高到了O(0),提高了网络数据包协议识别性能,系统在支持包括常用的以太网,广域网,无线网在内的800多种协议的情况下,识别效率超过100万个数据包每秒。
2、本发明网络数据包协议识别系统及方法,根据所有协议的协议特征信息建立特征值表或判断逻辑,添加新协议时只需要添加新协议的协议特征信息,再将新协议的协议特征信息添加至相应的特征值表中或者判断逻辑中即可,新协议添加方便,系统的扩展性强。
3、本发明网络数据包协议识别系统及方法还可以识别使用私有协议的数据包,制定或了解私有协议的人员输入并存储该私有协议的协议特征信息,再将私有协议的协议特征信息添加至相应的特征值表中或者判断逻辑中即可,增强了本系统的应用性。
具体实施方式
下面结合试验例及具体实施方式对本发明作进一步的详细描述。但不应将此理解为本发明上述主题的范围仅限于以下的实施例,凡基于本发明内容所实现的技术均属于本发明的范围。
本发明公开了一种网络数据包协议识别方法,包括协议配置步骤和数据包协议识别步骤。
如图1所示,所述协议配置步骤包括:
S101:输入所有协议的协议特征信息,并存储。
本步骤中,如果是添加新协议,则输入新协议的协议特征信息,并存储。
本步骤中,所述协议特征信息(或者称为协议识别信息)包括:所述协议的下级协议(下级协议可以有多个,例如TCP协议的下级协议有IP、IPv6等);所述协议的关键字,关键字指明关键字在数据包中的位置和长度,即在数据包中的指定位置读取指定长度的数值即为关键字在数据包中的数值;特征值;比较方式(比较方式包括大于、等于和小于);关键字定义。每个协议都具有其独特的协议特征信息,且各个协议的协议特征信息由颁布该协议标准的组织规定并公布,例如通用的协议(比如IP,TCP)是由标准组织(IEEE,IANA)规定并公布的。
本发明方法还可用于识别私有协议。如果是私有协议,则私有协议的协议特征信息由制定或了解该私有协议的人员输入并存储。
需要说明的是,一个数据包具有多种协议,这些协议分层布置,一层套在一层上面。例如,EthernetII\IP\TCP\HTTP表述方式的含义是,数据包开始的部分使用的是EthernetII协议,其上一级是IP协议,再上一级使用TCP协议,再上是HTTP协议。例如,在PC机上访问网页,数据包一般使用的协议形式为:EthernetII\IP\TCP\HTTP,要识别这样的数据包,需要知道EthernetII,IP,TCP,HTTP这4个协议的协议特征信息。如果使用了IPv6,则数据包使用的协议形式是EthernetII\IPv6\TCP\HTTP,要识别这样的数据包,则还需要输入IPv6的协议特征信息,如表1所示:
表1
协议 |
下级协议 |
关键字 |
比较方式 |
特征值 |
定义 |
EthernetII |
|
D16[12] |
〉 |
1500 |
EType=D16[12] |
IP |
EthernetII |
EType |
= |
0x0800 |
Pro=D8[9] |
IPv6 |
EthernetII |
EType |
= |
0x86dd |
Pro=D8[6] |
TCP |
IP,IPv6 |
Pro |
= |
6 |
DP=D16[2],SP=D 16[0] |
HTTP |
TCP |
DP,SP |
= |
80 |
|
需要说明的是,EthernetII协议是以太网的初始协议,没有下级协议,只需要指定物理介质即可。物理介质由捕获数据包的硬件决定,如果使用的是以太网卡则物理介质是以太网,如果使用的是无线网卡则物理介质是无线网。
需要说明的是,每个协议都具有关键字,关键字表明了这个关键字在数据包中的位置和长度。有的协议的关键字可以直接读出其在数据包中的位置和长度,如EthernetII,关键字为D16[12],表示该关键字为从数据包第12字节开始的连续两个字节(16个bit),而有的协议的关键字不能直接体现其在数据包中的位置和长度,而是在该协议的下级协议中体现,即从下级协议的关键字定义中可读出该协议关键字在数据包中的位置和长度。例如TCP协议,关键字是协议号Pro,不能直接读出关键字在数据包中的位置和长度,但是在下级协议IP和IPv6的关键字定义中定义了关键字在数据包中的位置和长度,IP协议中Pro=D8[9],关键字在数据包中的位置是第9个字节(8个bit),IPv6协议中Pro=D8[6],关键字在数据包中的位置是第6个字节(8个bit)。在数据包协议识别时,至于选取Pro=D8[9]还是Pro=D8[6],则根据下级协议来选择,如果下级协议是IP协议则选择Pro=D8[9],如果下级协议是IPv6协议则选择Pro=D8[6]。
S102:对所有协议(包括已有的协议和新添加的协议)的协议特征信息进行整合,一个协议作为一个协议节点,所有具有相同下级协议的协议节点组成一个节点层。
S103:根据协议的上、下级协议关系,连接所有协议节点组建成协议树,组成同一个节点层的所有协议节点位于协议树的同一层,协议树的入口为物理介质。
例如,物理介质为以太网的协议树的形式为:
以太网
需要说明的是,上述列举的协议树不是一个完整的协议树,仅是展示了表1中记录的所有协议在完整的协议树中的组成部分。EthernetII作为协议树的根节点;具有相同下级协议EthernetII的协议IP和IPv6组成一个节点层,即IP和IPv6位于协议树的同一个节点层,且在协议树中均位于根节点的下一个节点层;IP的上级协议为TCP,TCP作为一个协议节点在协议树中位于IP的下一个节点层;TCP的上级协议为HTTP,HTTP作为一个协议节点在协议树中位于TCP的下一个节点层;IPv6的上级协议为TCP,TCP作为一个协议节点在协议树中位于IPv6的下一个节点层;TCP的上级协议为HTTP,HTTP作为一个协议节点在协议树中位于TCP的下一个节点层。
S104:遍历所有协议的协议特征信息,收集所有比较方式为等于的协议,根据协议的关键字和特征值,一个关键字建立一张特征值表,特征值表中记录该关键字的所有特征值及各特征值对应的协议名称。例如,关键字为EType的特征值表的形式如表2(表2只展示了EType的特征值表的部分结构,并没有将特征值表中记录的所有特征值及相应的协议进行全部展示)所示:
表2
特征值 |
协议 |
0x0800 |
IP |
0x0806 |
ARP |
0x8137 |
IPX |
0x814C |
SNMP |
0x880B |
PPP |
0x880C |
GSMP |
0x88CC |
LLDP |
0x86DD |
IPv6 |
0xFFFF |
无 |
特征值表中特征值对应的协议为“无”的情况表示还没有一种协议的特征值为0xFFFF,可以定义一种特征值为0xFFFF的新协议。即如果一种新协议的特征值为0xFFFF,则将该新协议添加至EType的特征值表中。
S105:收集所有比较形式为大于或小于的协议的判断条件,建立判断逻辑,所述判断逻辑由各协议的名称及该协议的判断条件构成。
S106:将所有特征值表和判断逻辑存储,生成识别引擎。识别引擎是包括所有特征值表、判断逻辑的执行代码,作为一个动态链接库(DLL),可以被加载并调用运行。
参考图2,所述数据包协议识别步骤包括:
S201:输入待识别的数据包。
S202:根据捕获数据包的物理设备确定物理介质,进而选取识别数据包协议的协议树,然后进入协议树的根节点。
S203:从数据包中读取当前节点层中所有协议节点的关键字在数据包中的数值。
S204:查询当前节点层中的所有协议节点的关键字的特征值表,判断读取的所有的数值中是否有一个数值在特征值表中,即判断读取的所有的数值中是否有一个数值与特征值表中的某个特征值相等,如果有一个数值与特征值表中的某个数值相等,则表示有一个数值在特征值表中,如果在特征值表中,则得出当前协议节点的协议为特征值表中该特征值对应的协议,并进入步骤S206,如果不在则进入步骤S205。
S205:执行判断逻辑,将当前节点所有关键字的数值依次与判断逻辑中的判断条件进行比对,如果满足判断逻辑中的某判断条件,则得出当前节点的协议为该判断条件对应的协议,如果得出当前节点的协议,则进入步骤S206,如果关键字的数值不满足判断逻辑中的所有判断条件,则输出识别结果。
S206:进入协议树中当前节点层的下一个节点层,并返回步骤S203,循环执行步骤S203至S205。
下面以一个例子说明数据包协议识别步骤的过程。例如,捕获待识别的数据包的物理介质为以太网,则选取协议树入口为以太网的协议树来识别数据包协议,协议树的形式为:
以太网
需要说明,该协议树不是一个完整的协议树,仅截取了该协议树的一部分用于辅助本举例阐述数据包协议识别步骤的过程。从该协议树的根节点开始,根节点的关键字为D16[12],从数据包中第12个字节开始读取两个字节长度的数值为34525,该数值34525即为关键字D16[12]在数据包中的数值,查询关键字D16[12的特征值表,在特征值标中没有找到34525,则再执行判断逻辑,其中34525满足判断条件>1500,则得出根节点的协议为EthernetII。然后进入根节点的下一个节点层,当前节点层中所有协议节点的关键字均为EType,通过EthernetII协议中关键字定义可知EType=D16[12],则在数据包中读取关键字EType的数值为34525,查询EType的特征值表,找到34525与特征值表中的特征值0x86DD相等,则得出当前协议节点的协议为IPv6。再进入下一个节点层,当前节点层中的协议节点的关键字为Pro,由于下层协议为IPv6,所以从IPv6协议的关键字定义中读取Pro=D8[6],从数据包中第6个字节开始读取一个字节长度的数值为6,通过查询关键字Pro的特征值表可知当前协议节点的协议为TCP。再进入下一个节点层,读取当前节点层中所有协议节点的关键字为DP和SP,从TCP协议的关键字定义可知DP=D16[2],SP=D16[0],从数据包中读取关键字的数值分别为80和150,查询关键字DP和SP的特征值表,在关键字DP的特征值表中查到80,则得出协议为HTTP。输出识别结果,待识别数据包所使用的协议为EthernetII\IPv6\TCP\HTTP。
而传统的数据包协议识别方法是按照顺序依次调用协议插件,每调用一个识别插件,从数据包读取一次中关键字的数值,再将读取的数值与插件中的数值进行比较,如果相等,则找到协议,否则继续调用其他协议插件,直到找到协议为止。例如此例中确定IPv6协议的过程,首先调用IP协议插件,取得关键字在数据包中的数值为34525,比较:34525=0x0800?不成立,判断不是协议IP。再调用ARP插件,取得关键字在数据包中的数值为34525,比较:34525=0x0806?不成立,判断不是协议ARP。再调用IPX插件,调用SNMP插件等,直到调用IPv6插件,取得关键字在数据包中的数值为34525,比较:34525=0x86DD?成立,判断是协议IPv6,则本层查找结束,进入后续层次查找。
本发明方法通过建立特征值表和判断逻辑,通过查找特征值表和判断逻辑,识别数据包所使用的协议。通过一次查寻特征值表即可以快速的找出所使用的协议,代替了传统的通用识别方法中每个协议的比对操作,将识别效率从O(n)提高到了O(0),提高了网络数据包协议识别处理性能。经过大量研究证明,本系统在支持包括常用的以太网,广域网,无线网在内的800多种协议的情况下,识别效率超过100万个数据包每秒。O(n)和O(0)是执行效率的表示方法。详细的定义可以参考《数据结构》。O(n)表示效率和因素成正比,即例如可以识别的协议有n个,识别时间是s,那么可识别的协议有2n个时,识别时间就是2s,可识别的协议有100n个时,识别时间就是100s。O(0)则表示效率是常量,如果系统可识别的协议有n个协议,识别时间是s,那么协议增加到2n、10n、100n,识别时间仍然是s。
同时本发明方法具有很好的扩展性,需要添加新协议时,只需输入并存储新协议的协议特征信息,再根据该新协议的比较方式,将该新协议的特征值添加至相应的特征值表中,或将该新协议的判断条件添加至判断逻辑中即可。
参考图3,本发明还提供了一种网络数据包协议识别系统,包括协议配置装置和数据包协议识别装置,其中,所述协议配置装置包括协议特征存储单元,协议树生成单元,特征值表和判断逻辑生成单元,所述数据包协议识别装置包括:数据包采集单元,协议树选择单元,数据包协议识别单元。
协议特征存储单元用于存储协议的协议特征信息,所述协议特征信息包括:所述协议的名称、所述协议的下级协议名称、所述协议的关键字、特征值、关键字定义和比较方式,所述比较方式包括大于、等于、小于。
协议树生成单元用于根据协议特征信息生成协议树。协议树生成单元将将一个协议作为一个协议节点,所有具有相同下级协议的协议组成一个节点层,再按照协议的上、下级关系,连接所有协议节点组成协议树,组成同一个节点层的协议节点位于协议树的同一个节点层,所述协议树的入口为物理介质。
特征值表和判断逻辑生成单元用于根据协议特征信息,生成识别数据包协议的特征值表和判断逻辑。所述特征值表由比较方式为等于的协议的名称和该协议的特征值构成;所述判断逻辑由比较方式为大于或小于的协议的名称及该协议的判断条件构成。
数据包采集单元用于采集待识别的数据包;
协议树选择单元用于根据获取数据包的物理介质,选取识别数据包协议的协议树;
数据包协议识别单元用于读取待识别数据包中的关键字,并将读取到的关键字与特征值表和判断逻辑进行比对,识别数据包协议。所述数据包协议识别单元包括:关键字采集模块,用于从数据包中读取协议树中各协议节点的关键字在数据包中的数值;协议识别模块,用于通过查询特征值表和执行判断逻辑,识别数据包协议。查询特征值表,如果从数据包中读取的关键字的数值与特征值表中某个特征值相同,则得出协议节点的协议为特征值表中该特征值对应的协议,如果从数据包中读取的关键字的数值与特征值表中任何特征值都不同则执行判断逻辑,如果从数据包中读取的关键字的数值满足判断逻辑中的某个判断条件,则得出协议节点的协议为该判断条件对应的协议,如果不满足判断逻辑中的任何判断条件,则输出识别结果。