基于协议解析框架的自定义协议的实现方法
技术领域
本发明涉及网络技术领域,尤其涉及一种自定义协议的配置以及解析的方法和装置。本发明适用于具有固定报文格式但又不在通用协议范围之列的自定义协议的配置和解析。
背景技术
本发明对背景技术的描述属于与本发明的相关技术,仅仅是用于说明和便于理解本发明的发明内容,不应理解为申请人明确认为或推定申请人认为是本发明在首次提出申请的申请日的现有技术。
众所周知,当前是个信息时代,信息的价值在于能够传输和交换,不管是日常事务还是计算机本身,如果没有数据的交互这将使得互联网变得毫无价值。信息的传递必然伴随着传递方式的约定,而且对于不同的场景约定也会有所不同,虽然当前已经存在了诸多协议来解决各种场景的数据传输问题,但是众口难调,无法一规以蔽之。于是日益增长的网络传输需要和落后的现实之间的矛盾油然而生。于是面对不同的场景不同的需求,协议“定制”就显得灵活和必要。
目前对于具有固定报文格式但又不在通用协议范围之列的自定义协议的配置和协议解析均没有自动化快速处理的方法。
发明内容
针对以上问题,本发明提供一种本发明适用于具有固定报文格式但又不在通用协议范围之列的自定义协议的配置方法和相应的解析方法,该方法是对所有协议解析方法的一种抽象概括,通用的协议解析基于报文中字节起始位置、字节序、长度(字节数)、数据类型等来解析一个字段的值,这些参数都被固化到了协议解析内部,因而导致每解析一种协议就需要开发一种新的协议解析文件(或一个新的协议解析函数),一份协议解析文件(或者一个协议解析函数)不能同时解析多种协议(即先后上来两种不同协议,传统的做法是将其分发到不同协议解析文件中,找到相应协议解析函数,而本自定义协议却只需要在配置文件中指定这两种协议,不同协议报文上来后调用相同的自定义协议解析函数,解析出的结果也不会使不同的协议不同的字段混淆)。
本发明提供了一种基于协议解析框架的自定义协议的配置方法,其特征在于,包括:
步骤S1,加载配置文件,所述配置文件用来指定协议关联的端口号,需要监控的网卡等参数;
步骤S2,加载普通协议;
步骤S3,建立协议名、端口号、解析函数之间的关联关系,并将所述关联关系存储到全局hash表中,所述解析函数为传输层之上的协议解析函数;
步骤S4,获取需要分析的协议数据报文,所述需要分析的协议数据报文包括网络原始流量和/或存储在文件中的流量包;
步骤S5,对所述需要分析的协议数据报文进行分解,从中提取出一个或多个端口号;
步骤S6,根据提取出的所述一个或多个端口号在全局hash表中进行查找,查找在所述关联关系中所述一个或多个端口号关联的解析函数,如果查找到所述一个或多个端口号关联的解析函数,则执行步骤S5;以及
步骤S7,利用查找到的所述解析函数对所述需要分析的协议数据报文进行解析,得到解析结果,判断解析是否正常,如果正常则将解析结果以json格式输出;否则输出异常结果,所述异常结果包括所述需要分析的协议数据报文和/或解析失败提示。
优选地,所述步骤S1中,所述配置文件用于指定与协议名关联的一个或多个端口号,所述一个或多个端口号不同于其他已存在的协议名关联的端口号。
优选地,所述步骤S1中,所述配置文件还用于指定需要监控的网卡,所述网卡包括物理网卡和/或本地回环。
本发明还提供了一种用于对上所述基于协议解析框架的自定义协议的配置进行解析的方法,其特征在于,包括:
判断协议步骤:根据接收的原始网络报文到达的端口号,判断自定义协议类型;
自定义协议通用的协议解析步骤:将原始网络报文输入自定义协议通用的协议解析函数,以json格式字符串输出;
确定输出步骤:根据自定义协议类型中一个或多个指定字段决定该字段是否输出。
所述通用指根据字段类型,长度,起始位置,字节序来确定数据,并将该数据和对应字段关联起来。
所述条件表达式的字段名可以包含其它字段名以及字段名与字段名,字段名与数字、字符串之间的加减乘除求余以及与括号结合的操作。
本发明还提供了一种基于协议解析框架的自定义协议的配置系统,其特征在于,包括:
加载文件模块,加载配置文件,所述配置文件用来指定协议关联的(端口号等)参数;
加载协议模块,加载普通协议;
建立关系模块,建立协议名、端口号、解析函数之间的关联关系,并将所述关联关系存储到全局hash表中,所述解析函数为传输层之上的协议解析函数;
获取协议数据报文模块,获取需要分析的协议数据报文,所述需要分析的协议数据报文包括网络原始流量和/或存储在文件中的流量包;
分析模块,对所述需要分析的协议数据报文进行分解,从中提取出一个或多个端口号;
查找模块,根据提取出的所述一个或多个端口号在全局hash表中进行查找,查找在所述关联关系中所述一个或多个端口号关联的解析函数,如果查找到所述一个或多个端口号关联的解析函数,则执行步骤S5;
解析模块,利用查找到的所述解析函数对所述需要分析的协议数据报文进行解析,得到解析结果,判断解析是否正常,如果正常则将解析结果以json格式输出;否则输出异常结果,所述异常结果包括所述需要分析的协议数据报文和/或解析失败提示。
本发明还提供了一种用于对上述基于协议解析框架的自定义协议的配置进行解析的系统,其特征在于,包括:
判断协议模块:根据接收的原始网络报文到达的端口号,判断自定义协议类型;
自定义协议通用的协议解析模块:将原始网络报文输入自定义协议通用的协议解析函数,以json格式字符串输出;
确定输出模块:根据自定义协议类型中一个或多个指定字段决定该字段是否输出。
本发明还提供了一种计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述任一项所述的方法的步骤。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如上述任一项方法的步骤。
这里的字段名指的是,json格式中的“键”。
这里的字段指的是,json格式中的“键值对”。
本发明产生的有益效果是:
1.配置文件中可以配置多个协议;
2.不同主机之间或者相同主机不同端口之间使用相同的协议来建立不同连接,因此彼此之间不会串扰;
3.不同字段之间彼此可以使用其它字段的值作为该字段是否显示或抓取的条件(配置在”条件表达式”中);
4条件表达式支持多种操作,包括加减乘除求余以及与括号的结合等。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍:
图1示出了本发明的一种基于协议解析框架的自定义协议的配置方法的流程图;
图2示出了本发明的一种基于协议解析框架的自定义协议的配置系统的框图;
图3示出了本发明的一种基于协议解析框架的自定义协议的配置方法的优选实施例的流程图;
图4示出了本发明的一种基于协议解析框架的自定义协议的配置系统的框图;
图5示出了依据本发明的一种基于协议解析框架的自定义协议的配置方法以及相应解析方法的总流程图;
图6示出了依据图5所示一种基于协议解析框架的自定义协议的解析方法的更详细的流程图;以及
图7-图18示出了本发明的一种基于协议解析框架的自定义协议的配置方法和解析方法的一个具体实例。
具体实施方式
为了使本发明的目的、技术方案以及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实例仅仅用于解释本发明,并不用于限定本发明。
在下述介绍中,术语“第一”、“第二”仅用于描述的目的,而不能理解为暗示其相对重要性。
下述介绍提供了本发明的多个实施例,不同实施例之间可以替换或者合并组合,因此本发明也可认为包含所记载的相同和/或不同实施例的所有可能组合。因而,如果一个实施例包含特征A、B、C,另一个实施例包含特征B、D,那么本发明也应视为包括含有A、B、C、D的一个或多个所有其他可能的组合的实施例,尽管该实施例可能并未在以下内容中有明确的文字记载。
实施例1
图1示出了本发明一种自定义协议的配置的方法的流程图。
如图1所示,一种自定义协议的配置的方法,包括以下步骤:
步骤S1,加载配置文件,所述配置文件用来指定协议关联的端口号,需要监控的网卡等参数。
配置文件中包含主要信息和特性如下:
1)协议名,每一个协议名就是一个协议,可以配置多个协议。
2)传输层协议类型(TCP/UDP)
3)字段名,字段名是对报文中某些字节集合的描述,每个协议可以包含多个字段。
4)对字段名的描述字段,包含如下:
a)数据类型(整形,无符号整形,浮点型,字符型)
b)起始字节
c)字节个数(位置和长度共同决定该字段名对应的值)
d)字节序(指定报文以大端还是小端解释)
e)帧类型(请求帧/响应帧)
f)位掩码(控制数据取舍)
g)条件表达式(控制数据取舍)
5)端口号,可以配置多个端口号,不同协议不能配置相同端口号。
除此之外还具备其他特性:
6)不同主机之间或者相同主机不同端口之间使用相同的协议来建立不同连接,彼此之间不会串扰。
7)不同字段之间彼此可以使用其它字段的值作为该字段是否显示或输出的条件。
8)条件表达式中支持加减乘除求余等操作,支持括号。
新建协议的页面为web配置自定义协议的页面,配置内容包括协议名称、传输类型、端口号、字段名、字段类型、字节序、掩码、帧类别、条件表达式等。
步骤S2,加载普通协议。
步骤S3,建立协议名、端口号、解析函数之间的关联关系,并将所述关联关系存储到全局hash表中,所述解析函数为传输层之上的协议解析函数;
步骤S4,获取需要分析的协议数据报文,所述需要分析的协议数据报文包括网络原始流量和/或存储在文件中的流量包;
步骤S5,对所述需要分析的协议数据报文进行分解,从中提取出一个或多个端口号;
步骤S6,根据提取出的所述一个或多个端口号在全局hash表中进行查找,查找在所述关联关系中所述一个或多个端口号关联的解析函数,如果查找到所述一个或多个端口号关联的解析函数,则执行步骤S5;
步骤S7,利用查找到的所述解析函数对所述需要分析的协议数据报文进行解析,得到解析结果,判断解析是否正常,如果正常则将解析结果以json格式输出;否则输出异常结果,所述异常结果包括所述需要分析的协议数据报文和/或解析失败提示。
较优的,在所述步骤S1之前还包括步骤S0,
加载配置文件,所述配置文件用于指定与协议名关联的一个或多个端口号,所述一个或多个端口号不其他已存在的协议名关联的端口号冲突。
指定网卡的配置在自定义协议解析依赖的TAA平台的配置之中。
较优的,所述步骤S2中的所述网络原始流量来源于指定的需要监控的网卡的流量;所述存储在文件中的流量包来源于指定的需要读取的文件或目录。
图2示出了本发明的第一实施例的一种通用的协议解析框架实现装置的示意图。
一种通用的协议解析框架实现装置,包括关联关系建立模块、获取模块、提取模块、查找模块、解析模块、输出模块:
所述关联关系建立模块,用于建立协议名、端口号、解析函数之间的关联关系,并将所述关联关系存储到全局hash表中,所述解析函数为传输层之上的协议解析函数;
所述获取模块,用于获取需要分析的协议数据报文,所述需要分析的协议数据报文包括网络原始流量和/或存储在文件中的流量包;
所述提取模块,用于对所述需要分析的协议数据报文进行分解,从中提取出一个或多个端口号;
所述查找模块,用于根据提取出的所述一个或多个端口号在全局hash表中进行查找,查找在所述关联关系中所述一个或多个端口号关联的解析函数;
所述解析模块,利用查找到的所述解析函数对所述需要分析的协议数据报文进行解析,得到解析结果;
所述输出模块,判断所述解析模块的所述解析结果是否正常,如果正常则将所述解析结果以json格式输出,否则输出异常结果,所述异常结果包括所述需要分析的协议数据报文和解析失败提示。
较优的,还包括加载模块,用于加载配置文件;
所述配置文件用于指定与协议名关联的一个或多个端口号,所述一个或多个端口号不同于其他已存在的协议名关联的端口号;
和/或,所述配置文件还用于指定需要监控的网卡,所述网卡包括物理网卡和/或本地回环。
较优的,所述获取模块中的所述网络原始流量来源于指定的需要监控的网卡的流量;所述存储在文件中的流量包来源于指定的需要读取的文件或目录。
实施例2
图3示出了本发明的一种基于协议解析框架的自定义协议的配置方法的优选实施例的流程图;
判断协议步骤:根据接收的原始网络报文到达的端口号,判断自定义协议类型;
自定义协议通用的协议解析步骤:将原始网络报文输入自定义协议通用的协议解析函数,以json格式字符串输出;
确定输出步骤:根据自定义协议类型中一个或多个指定字段决定该字段是否输出。
图4示出了本发明的一种基于协议解析框架的自定义协议的配置系统的框图,包括:
判断协议模块:根据接收的原始网络报文到达的端口号,判断自定义协议类型;
自定义协议通用的协议解析模块:将原始网络报文输入自定义协议通用的协议解析函数,以json格式字符串输出;
确定输出模块:根据自定义协议类型中一个或多个指定字段决定该字段是否输出。
实施例3
图5示出了依据本发明的一种基于协议解析框架的自定义协议的配置方法以及相应解析方法的总流程图。
判断协议步骤:根据接收的原始网络报文到达的端口号,判断自定义协议类型;
自定义协议通用的协议解析步骤:将原始网络报文输入自定义协议通用的协议解析函数,以json格式字符串输出;
确定输出步骤:根据自定义协议类型中一个或多个指定字段决定该字段是否输出。
这里的字段名指的是,json格式中的“键”。
这里的字段指的是,json格式中的“键值对”。
图6示出了依据图5所示一种基于协议解析框架的自定义协议的解析方法的更详细的流程图。
实施例4
图7-图18示出了本发明的一种基于协议解析框架的自定义协议的配置方法和解析方法的一个具体实例。
如图7配置协议,如图8所示在web页面配置如图8中有色字体(条件表达式需要使用query build配置,这里省略)。
图9和图10示出了表示下发后的自定义协议的格式的配置文件。
name:协议名这里是caxa
filedsinfo:caxa协议包含的字段,这里是func_code和reg_addr
port:端口号,这里是501
transtype:传输类型,表示caxa协议传输层使用tcp还是udp,这里配置tcp
字段配置以func_code为例:
typed:uint//func_code字段数据类型十无符号整型(另外包括整型,双精度实型,字符串类型)
offset:7//func_code的值从报文的第8个自己开始
length:1//func_code从报文的第八个字节开始取1个字节
byte_order:big_endian//字节序,对于多个字节按照大端还是小段进行解析,但字节无意义
frametype:all//func_code字段对于请求帧(req)生效还是响应帧(res)生效抑或是二者皆可(all)
mask:ff//func_code掩码,指定func_code要不要生效,对于取位操作意义重大
conditions:...//func_code条件,为func_code是否生效设定的条件,这里使用query build配置!途中条件的含义是:func_code的值乘以2再乘以reg_addr的值如果大于6,或者func_code的值乘以2再乘以reg_addr的值如果等于6则输出func_code,否则不输出。
现在假设请求报文内容为:000102030405060708090a 0b 0c 0d
那么func_code=7(0x07)
reg_addr=2057(0x0809)
conditions判断后($caxa.func_code*2)*$caxa.reg_addr=28798>6,掩码为ff,帧类型all,所以报文输出
reg_addr中的条件语句是一个字符串,所以reg_addr不进行条件判断,掩码为ff表示允许原样输出,帧类别为请求帧(request);输出报文如图11-图13(json格式化后的结果)。
假设响应报文内容为:000102030405060708090a 0b 0c 0d
reg_addr字段“帧类型”为req(request)所以该字段不显示,func_code类型是all,条件满足,掩码ff满足所以只输出func_code:
如果所有字段都不满足条件,则报文原样输出。
另,自定义协议可以层次输出,配置示例如图14-图15。
同样的请求报文,其输出如图16-图18。
本说明书中的“模块”和“单元”是指能够独立完成或与其他部件配合完成特定功能的软件和/或硬件,其中硬件例如可以是FPGA(Field-Programmable Gate Array,现场可编程门阵列)、IC(Integrated Circuit,集成电路)等。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述用于授权管理控制请求的方法的步骤。其中,计算机可读存储介质可以包括但不限于任何类型的盘,包括软盘、光盘、DVD、CD-ROM、微型驱动器以及磁光盘、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、闪速存储器设备、磁卡或光卡、纳米系统(包括分子存储器IC),或适合于存储指令和/或数据的任何类型的媒介或设备。
本发明还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,处理器执行程序时实现用于授权管理控制请求的方法的步骤。在本发明实施例中,处理器为计算机系统的控制中心,可以是实体机的处理器,也可以是虚拟机的处理器。
以上介绍仅为本发明的优选实施例而已,并非对本发明作任何实质和形式上的限制。虽然本发明已以较佳实施例揭示如上,然而并非用以限定本发明,对于本领域的技术人员来说,在不脱离本发明技术方案范围内,可以利用上述揭示的技术内容作出各种更该和变化的等效实施例。但凡未脱离本发明的精神和原则,依据本发明的技术实质对以上实施例所作的任何简单修该、等同替换、该进等,均应包含在本发明的保护范围之内。