专利名称:一种基于npta技术的网络协议识别方法及装置的制作方法
技术领域:
本发明涉及一种网络协议识别方法及装置,尤其是涉及一种基于NPTA技术的网络协议识别方法及装置。
背景技术:
伴随着计算机网络的快速发展,对网络信息内容管理的需求也越来越高,当前对网络信息内容的管理已经从最初的基于IP、端口以及Mac地址的分析与监控发展到基于网络协议的识别、管理和监控,在这当中,对网络协议的精确以及快速的识别,成了此类产品的基础。对于网络协议的识别,都是基于其特征值的,虽然网络上的协议类型已经数不胜数,但是理论上每一种应用协议都有其唯一的特征值,根据此特征值,可以识别出网络上各种数据包所属的协议类型。虽然每一种协议都可根据其特征值被识别出来,但是由于网络中的协议类型众多,如何快速的识别出每个数据包所对应的协议类型,已经成了网络协议分析中面临的难题。为了提高协议识别的速度,目前通用的做法是将各种协议按照常用程度来制定优先级,越常用的协议优先级越高,反之则越低,当有数据包通过时,先用优先级高的协议特征值去匹配,如果成功,则识别成功,如果失败,则继续用优先级低的协议特征值来匹配,直到匹配成功为止。由于网络中大部分的数据包都是常用协议的数据包,采用这种解决方案能够快速的识别出常用协议的协议类型,从而提高协议识别的速度。虽然上述方案能在一定程度上提高协议识别的速度,但是却不能从根本上解决协议识别的效率问题。首先,每个人的上网习惯都不尽相同,所以很难制定出适合每个人的协议优先级;其次,匹配低优先级的协议类型时,由于庞大的协议特征值库造成了需要匹配多次才能匹配成功,这将消耗大量的协议识别时间,造成效率的浪费。由此可知,目前采取的方案对于提高协议识别效率的作用有限,协议识别将会占用大量的服务资源,如果网络流量增大,则必须提高硬件的配置,增加投入成本,否则,将会影响到网络的正常运行。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种协议匹配效率高的基于NPTA技术的网络协议识别方法及装置。本发明的目的可以通过以下技术方案来实现一种基于NPTA技术的网络协议识别方法,其特征在于,包括以下步骤1)数据包入口模块获取数据包,并将数据包传输给协议类型判断模块;2)协议类型判断模块对其进行判断为TCP协议或UDP协议,根据数据包类型进入下一模块的相应子树中做进一步判断;3)数据包进入外网端口判断模块后,外网端口判断模块对其进行判断是否为指定的端口,若为是,根据其端口值进入下一模块的子树中做进一步判断,若为否,将其归类到“全端口”类型中,并进入下一模块的“全端口,,子树中做进一步判断;4)数据包进入协议分析模块,该协议分析模块对其判断第一个字节的值,根据第一个字节的值来进入下一模块的子树中继续判断,若其第一个字节的值没有对应下一模块的子树,将其归到下一模块的“全数据”子树中进行判断;5)数据包进入协议特征值匹配模块,该协议特征值匹配模块匹配协议特征值,判定协议类型。所述的数据包包括内网IP地址、外网IP地址、内网端口、外网端口、协议类型。一种基于NPTA技术的网络协议识别装置,其特征在于,包括协议特征值库,该协议特征值库包括数据包入口模块、协议类型判断模块、外网端口判断模块、协议分析模块、 协议特征值匹配模块,所述的数据包入口模块、协议类型判断模块、外网端口判断模块、协议分析模块、协议特征值匹配模块从上到下依次连接。所述的协议特征值库为树形结构。与现有技术相比,本发明大大减少了协议匹配的次数,从而提高了协议识别效率。
图1为本发明的树形图;图2为本发明的硬件结构示意图。
具体实施例方式下面结合附图和具体实施例对本发明进行详细说明。如图1、图2所示,一种基于NPTA技术的网络协议识别方法,包括以下步骤1)数据包入口模块1获取数据包,并将数据包传输给协议类型判断模块2 ;2)协议类型判断模块2对其进行判断为TCP协议或UDP协议,根据数据包类型进入下一模块的相应子树中做进一步判断;3)数据包进入外网端口判断模块3后,外网端口判断模块3对其进行判断是否为指定的端口,若为是,根据其端口值进入下一模块的子树中做进一步判断,若为否,将其归类到“全端口”类型中,并进入下一模块的“全端口,,子树中做进一步判断;4)数据包进入协议分析模块4,该协议分析模块4对其判断第一个字节的值,根据第一个字节的值来进入下一模块的子树中继续判断,若其第一个字节的值没有对应下一模块的子树,将其归到下一模块的“全数据”子树中进行判断;5)数据包进入协议特征值匹配模块5,该协议特征值匹配模块5匹配协议特征值, 判定协议类型。该过程从根节点开始,直到叶子节点结束。网络数据包通过树根节点(数据包入口模块1)传入,该数据包里包含了应用层数据内容、内网端口、外网端口、内网IP、外网IP、 数据包类型等信息,在树的第一层(协议类型判断模块幻进行协议类型判断,如果是TCP 协议,则进入到TCP协议子树里面继续判断,如果是UDP,则进入到UDP协议子树,在确定了协议类型后,数据包进入了树的第二层(外网端口判断模块幻,在这一层,根据其外网端口来继续到树的下一层,根据数据包里的外网端口值来进入到相应的特定端口的子树里面继续判断,如果匹配特定端口失败,则进入到“全端口 ”子树继续判断;在进入到特定端口子树后,既进入到树的第三层(协议分析模块4),接下来根据数据包里应用层数据的第一个字节的值来进入到树的下一层即最终的协议特征值判断层(协议特征值匹配模块幻,在该层来匹配存在的协议特征值,如果匹配失败,则返回第三层进入到“全数据”子树继续匹配,如果匹配仍然失败,则返回到第二层的“全端口 ”子树继续匹配,如果仍旧匹配失败,则该协议识别失败,此时协议特征值匹配流程结束。一种基于NPTA技术的网络协议识别装置,包括协议特征值库,该协议特征值库包括数据包入口模块1、协议类型判断模块2、外网端口判断模块3、协议分析模块4、协议特征值匹配模块5,所述的数据包入口模块1、协议类型判断模块2、外网端口判断模块3、协议分析模块4、协议特征值匹配模块5从上到下依次连接。本发明提出了一种树形结构的网络协议识别方式,来提高网络协议识别的效率, 可以由多种方式来实现该方法,具体实现方法的选择可根据产品的开发平台、编程语言等来决定,以下具体描述采用C语言动态库的方式实现该方法做具体描述。C语言中动态库的方式,树根对应的为动态库的入口函数,树的每一层都用相应的函数来实现,具体定义如下/***\brief协议分析接口*\param inner_ip 内网的IP地址,网络字节序*\param inner_port 内网的端口号,网络字节序*\param outter_ip 外网的IP地址,网络字节序*\param outter_port 外网的端口号,网络字节序*\param ip_protocol 协议,tcp 6 udp 17*\param payload 数据段,不包含ip头部和tcp头部*\param plen 数据段长度*\return返回协议ID,如果协议分析失败,返回0*/unsigned int analyse_package(unsigned int inner_ip,unsigned short inner_port,unsigned int outte_ip,unsigned short outter_port,unsigned char ip_protocol,const unsigned char氺payload,int plen);以上为动态链接库的入口函数及其参数、返回值的说明,在进行协议分析时,只需
要调用该函数即可,具体实现方式由该动态库完成,即树形实现方式。在该函数中,根据参数ip_pr0t0C0l即协议类型来进入到下一层子树中,下一层对应的处理函数有两个,即TCP 协议的处理函数和UDP协议的处理函数,具体如下/***\brieftcp协议分析函数
*\param outter_port 外网的端口号,网络字节序*\param payload 数据段,不包含ip头部和tcp头部*\param plen 数据段长度*\return返回协议ID,如果协议分析失败,返回0*/unsigned int tcp(unsigned short outter_port,const unsigned char氺payload,int plen);*\briefudp协议分析函数*\param outter_port :外网的端口号,网络字节序*\param payload 数据段,不包含ip头部和tcp头部*\param plen 数据段长度*\return返回协议ID,如果协议分析失败,返回0*/unsigned int udp(unsigned short outter_port,const unsigned char氺payload,int plen);在该函数内根据端口的值来进入到下一层子树中,即端口判断层,端口判断层函
数定义为*\brief指定端口的协议分析函数,该函数的命名规则为协议类型_port_端口值*\param payload 数据段,不包含ip头部和tcp头部*\param plen 数据段长度*\return返回协议ID,如果协议分析失败,返回0*/unsigned int tcp_port_80(const unsigned char氺payload,int plen);如果是udp协议则为unsigned int udp_port_80(const unsigned char氺payload,int plen);如果是全端口匹配,则为unsigned int tcp_port_xxxx(const unsigned char氺payload,int plen);在调用端口匹配函数完毕后,继续进入到下一层,即数据包头字节匹配,该层的函
数定义为
*\brief指定头字节值的协议分析函数,该函数的命名规则为协议类型端口
值_头字节值*\param payload 数据段,不包含ip头部和tcp头部*\param plen 数据段长度*\return返回协议ID,如果协议分析失败,返回0*/unsigned int tcp_80_0x01(const unsigned char氺payload,int plen);如果是UDP协议的则为unsigned int udp_80_0x01(const unsigned char氺payload,int plen);如果是“全字节”则为unsigned int udp_80_0xxx(const unsigned char氺payload,int plen);在数据包头字节匹配的函数实现中,执行匹配具体协议特征的操作,即树叶节点的操作,到此该协议匹配流程结束。
权利要求
1.一种基于NPTA技术的网络协议识别方法,其特征在于,包括以下步骤1)数据包入口模块获取数据包,并将数据包传输给协议类型判断模块;2)协议类型判断模块对其进行判断为TCP协议或UDP协议,根据数据包类型进入下一模块的相应子树中做进一步判断;3)数据包进入外网端口判断模块后,外网端口判断模块对其进行判断是否为指定的端口,若为是,根据其端口值进入下一模块的子树中做进一步判断,若为否,将其归类到“全端口”类型中,并进入下一模块的“全端口,,子树中做进一步判断;4)数据包进入协议分析模块,该协议分析模块对其判断第一个字节的值,根据第一个字节的值来进入下一模块的子树中继续判断,若其第一个字节的值没有对应下一模块的子树,将其归到下一模块的“全数据”子树中进行判断;5)数据包进入协议特征值匹配模块,该协议特征值匹配模块匹配协议特征值,判定协议类型。
2.根据权利要求1所述的一种基于NPTA技术的网络协议识别方法,其特征在于,所述的数据包包括内网IP地址、外网IP地址、内网端口、外网端口、协议类型。
3.一种基于NPTA技术的网络协议识别装置,其特征在于,包括协议特征值库,该协议特征值库包括数据包入口模块、协议类型判断模块、外网端口判断模块、协议分析模块、协议特征值匹配模块,所述的数据包入口模块、协议类型判断模块、外网端口判断模块、协议分析模块、协议特征值匹配模块从上到下依次连接。
4.根据权利要求3所述的一种基于NPTA技术的网络协议识别方法,其特征在于,所述的协议特征值库为树形结构。
全文摘要
本发明涉及一种基于NPTA技术的网络协议识别方法,包括以下步骤1)数据包入口模块获取数据包,并将数据包传输给协议类型判断模块;2)协议类型判断模块对其进行判断为TCP协议或UDP协议,根据数据包类型进入下一模块的相应子树中做进一步判断;3)数据包进入外网端口判断模块后,外网端口判断模块对其进行判断是否为指定的端口;4)数据包进入协议分析模块,该协议分析模块对其判断第一个字节的值;5)数据包进入协议特征值匹配模块,该协议特征值匹配模块匹配协议特征值,判定协议类型。与现有技术相比,本发明具有减少了匹配的次数,提高效率等优点。
文档编号H04L29/06GK102215206SQ20101013754
公开日2011年10月12日 申请日期2010年4月1日 优先权日2010年4月1日
发明者富有, 田伟厚, 董翠珠, 郑剑芳, 钱波 申请人:上海凌屹信息科技有限公司