CN116016345A - 一种基于自定义协议描述语言的网络流量还原方法 - Google Patents
一种基于自定义协议描述语言的网络流量还原方法 Download PDFInfo
- Publication number
- CN116016345A CN116016345A CN202211548448.8A CN202211548448A CN116016345A CN 116016345 A CN116016345 A CN 116016345A CN 202211548448 A CN202211548448 A CN 202211548448A CN 116016345 A CN116016345 A CN 116016345A
- Authority
- CN
- China
- Prior art keywords
- protocol
- field
- type
- template
- description language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 238000004458 analytical method Methods 0.000 claims abstract description 50
- 230000009467 reduction Effects 0.000 claims abstract description 4
- 238000004806 packaging method and process Methods 0.000 claims abstract description 3
- 230000014509 gene expression Effects 0.000 claims description 50
- 230000008569 process Effects 0.000 claims description 9
- 230000003068 static effect Effects 0.000 claims description 7
- 238000003491 array Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 abstract description 7
- 239000000945 filler Substances 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000005206 flow analysis Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 101710117064 Trimethylamine corrinoid protein 1 Proteins 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- HRULVFRXEOZUMJ-UHFFFAOYSA-K potassium;disodium;2-(4-chloro-2-methylphenoxy)propanoate;methyl-dioxido-oxo-$l^{5}-arsane Chemical compound [Na+].[Na+].[K+].C[As]([O-])([O-])=O.[O-]C(=O)C(C)OC1=CC=C(Cl)C=C1C HRULVFRXEOZUMJ-UHFFFAOYSA-K 0.000 description 1
- 230000004083 survival effect Effects 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Communication Control (AREA)
Abstract
本发明公开了一种基于自定义协议描述语言的网络流量还原方法,包括步骤:使用自定义协议描述语言,定义所要解析的网络协议的结构和内部字段,存入配置文件;读取标准配置文件,解析并生成协议模板;将协议模板注册到协议模板库,构建上、下层级协议的关联关系;获取原始网络流数据,封装成标准网络流;读取标准网络流,根据上、下层级协议的关联关系,从协议模板库中匹配对应的协议模板;对匹配成功的标准网络流,根据协议模板内字段类型执行对应的解析逻辑,进行流量还原;将流量还原的结果导出。本发明可以有效减少开发工作量并帮助开发人员快速获取协议解析结果,同时实现新协议解析逻辑的动态扩展和快速更新。
Description
技术领域
本发明涉及网络数据处理技术领域,尤其是一种基于自定义协议描述语言的网络流量还原方法。
背景技术
网络流量还原是指对网络中传输的流量数据进行解析,逐层识别数据包头中所携带的协议类型并还原成所需的数据格式。协议解析结果是流量分析、防火墙、入侵检测等领域的重要数据来源。而获取协议解析结果的常见手段是开发各种协议解析代码来解析捕获的网络流量数据。目前一些公司已经针对各个协议开发出了高效且健壮的解析代码。但是由于协议解析代码专用性强、扩展性低,或者出于商业目的而没有对外开源等原因,其他项目难以进行复用。因此在新的项目中,开发人员往往需要重新使用专用开发语言来逐个开发每个协议的解析代码。
然而,开发高质量的协议解析代码并非易事。首先,由于网络协议数量庞大,协议解析代码开发耗时耗力。开发人员需要综合考虑项目架构、输入输出、异常包处理、代码性能等多个问题。其次,在开发过程会出现不可避免代码漏洞,这将导致不同程度的安全问题。最后,由自然语言描述的协议规范文档可能使得开发人员在阅读时产生歧义而编写出不符合标准的解析代码。
此外,采用硬编码的方式实现网络流量还原容易导致解析实时性下降的问题。在处理新协议适配、协议解析代码逻辑更新、解析代码漏洞修复等问题时,往往需要暂停网络流量解析。这在一些实时性强、安全等级高的应用场景中是难以接受的。
发明内容
本发明主要解决硬编码实现网络流量解析存在着代码开发效率低、工作量大、难以动态扩展以适应实时应用场景的问题,提供基于自定义协议描述语言的网络流量还原方法。通过使用自定义协议描述语法来定义协议结构和字段信息,并配合使用协议解析器实现网络流量的自动化解析,可以有效减少开发工作量并帮助开发人员快速获取协议解析结果,同时实现新协议解析逻辑的动态扩展和快速更新。
为解决上述技术问题,本发明采用的技术方案是:
一种基于自定义协议描述语言的网络流量还原方法,包括:
步骤1,使用自定义协议描述语言,定义所要解析的网络协议的结构和内部字段,存入配置文件;将所有配置文件格式化为标准配置文件,并注册到配置文件管理模块;
步骤2,读取标准配置文件,解析并生成协议模板;
步骤3,将协议模板注册到协议模板库,构建上、下层级协议的关联关系;
步骤4,获取原始网络流数据,封装成标准网络流;
步骤5,读取标准网络流,根据上、下层级协议的关联关系,从协议模板库中匹配对应的协议模板;
步骤6,对匹配成功的标准网络流,根据协议模板内字段类型执行对应的解析逻辑,进行流量还原;
步骤7,将流量还原的结果导出。
进一步的,步骤1中,所述自定义协议描述语言,包括协议类、字段类、属性类和动态表达式类信息;其中,协议类信息包括协议名、协议版本、下层协议类型、上层协议关联字段;字段类信息包括基本类型字段、分支类型字段、循环类型字段;属性类信息包括字段名、字段的数据长度、字段的解析类型、字段的导出类型,字段的数据长度判定方式、字段是否解析、字段是否导出;动态表达式类信息为:数值表达式和布尔表达式;所述表达式由表达式括号、运算符、字段引用符和字段名组成。
更进一步的,所述分支类型字段包括if字段和switch字段;其中,if字段由布尔动态表达式和真假两个分支组成;switch字段由分支判定字段和分支集合组成;所述循环类型字段包括for字段和while字段;其中,for字段由数值动态表达式和字段数组组成;while字段由布尔动态表达式和字段数组组成。
进一步的,所述步骤2具体为:读取标准配置文件,逐行解析协议描述;按照协议描述中的字段类型逐个字段创建对象,并初始化字段的静态属性信息和动态表达式信息;根据动态表达式中的字段引用关系将字段进行连接;将字段按照协议定义中的嵌套关系组装成协议模板。
进一步的,所述步骤3具体过程为:将协议模板注册到协议模板库;根据协议定义的上层协议关联字段对其模板内的字段进行标识,并在协议模板库中注册该协议和关联字段信息;解析协议的下层协议关联信息中的协议类型,并在协议模板库中查询是否存在对应的协议模板,若存在则将二者连接,得到上、下层级协议的关联关系。
进一步的,所述步骤6,根据协议模板内字段类型执行对应的解析逻辑,进行流量还原,具体为:根据字段类型选择执行逻辑:对于基本字段,则获取解析字段的静态属性和动态表达式值;对于分支字段,根据动态表达式来选择具体解析分支内的字段数组;对于循环字段,根据动态表达式来确定循环体内字段数组的解析次数;根据字段的数据长度判定方式来计算其数据长度;判断字段是否解析,若解析则识别字段的数据类型,并按照数据长度读取对应字节进行解析,得到解析结果。
进一步的,所述步骤7,将流量还原的结果导出,具体为:使用JSON结构,存储流量还原后的协议的结构信息和每个字段的解析结果数据。
本发明的有益效果是:
1.使用自定义协议描述语言来定义网络协议的结构和内部字段类型,能够快速准确地描述协议结构信息和字段属性信息。同时通过对新增协议使用自定义协议描述语言进行定义,能够快速扩展对新增协议流量解析的支持,具有很好的可扩展性和灵活性。
2.协议解析器解析协议描述语言生成协议模板,并通过使用协议模板匹配网络流的方式实现自动化协议解析,可以有效减少工作量,提高代码开发效率。
3.协议解析器内部由解析引擎,协议模板库,执行引擎和导出引擎共计四个模块构成。每个模块对外提供了简明的功能接口。通过调用接口可快速实现网络流的自动化解析。
4.协议解析器自动地将解析结果根据用户配置导出为JSON数据格式。JSON是一种可嵌套的数据格式,能够清晰的展现协议的结构信息。同时,JSON作为一种通用数据结构,可被多种语言解析,能够便利地实现跨平台共享。
附图说明
图1是本发明的基于自定义协议描述语言的网络流量还原方法框架图。
图2是本发明的基于自定义协议描述语言的网络流量还原方法流程图。
图3是本发明的协议解析器的基于字段属性的统一解析逻辑步骤。
具体实施方式
一种基于自定义协议描述语言的网络流量还原方法,使用自定义协议描述语言定义协议,通过将协议解析器生成的协议模板与网络流量进行匹配,并按照基于字段属性的统一解析逻辑进行流量还原,实现了网络流量的自动化解析和协议的动态扩展。该方法主要包括以下过程:
步骤1:使用自定义协议描述语言描述所要解析的网络协议的结构和字段信息,并将描述内容存入配置文件。
步骤2:创建一个协议解析器实例对象来维护管理生成的协议模板,并暂存解析过程中的状态信息和解析中间结果。
步骤3:加载并解析所有配置文件内协议的描述内容,然后生成对应的协议模板对象。
步骤4:在协议模板库中注册各个协议模板进行统一管理维护,并构建协议模板间的层级关联关系。
步骤5:读取网络协议数据流输入,并在协议模板库中获取对应的协议模板。通过将协议数据流与协议模板进行匹配,并按照基于字段属性的统一解析逻辑进行流量还原。
步骤6:将解析结果按照用户自定义格式进行导出,并按JSON格式进行组装。
作为优选,所述的自定义描述语法包括如下内容:
协议描述语言包含四类描述信息定义,包括:协议类、字段类、属性类和动态表达式类。
协议类信息包括:协议名、协议版本、上层协议类型、下层协议关联字段。
字段类信息包括:基本类型字段、分支类型字段、循环类型字段。
属性类信息包括:字段名、字段的数据长度、字段的解析类型、字段的导出类型,字段的数据长度判定方式、字段是否解析、字段是否导出。
动态表达式分为两种:数值表达式和布尔表达式。表达式由表达式括号、运算符、字段引用符和字段名组成。
作为优选,所述的分支类型字段包括两种:if字段和switch字段。其中if字段由布尔动态表达式和真假两个分支组成;switch字段由分支判定字段和分支集合组成;
作为优选,所述的循环类型字段包括两种:for字段和while字段。其中,for字段由数值动态表达式和字段数组组成;while字段由布尔动态表达式和字段数组组成;
作为优选,所述的协议解析器的结构包括解析引擎,协议模板库,执行引擎和导出引擎。
作为优选,解析配置文件来生成协议模板对象,具体过程为:
初始化解析引擎,读取配置文件并逐行解析协议描述内容。
按照协议描述中的字段类型逐个字段创建对象,并初始化字段的静态属性信息和动态表达式信息。
根据动态表达式中的字段引用关系将字段进行连接。
将字段按照协议定义中的嵌套关系组装成协议模板对象。
作为优选,将所有协议模板注册到协议模板库进行管理并构建层级关联关系,具体过程为:
协议解析器将生成的协议模板注册到内部的协议模板库中进行统一维护管理,并提供协议模板的增删查改等操作。
根据协议定义的上层协议关联字段对其模板内的字段进行标识,并在在协议模板库中注册该协议和关联字段信息。
解析协议的下层协议关联信息中的协议类型,并在协议模板库中查询是否存在对应的协议模板对象,若存在则将二者连接。
作为优选,按照基于字段属性的统一解析逻辑进行流量还原,具体过程为:
根据字段类型选择执行逻辑,对于分支字段,根据动态表达式来选择具体解析分支内的字段数组;对于循环字段,根据动态表达式来确定循环体内字段数组的解析次数。对于基本字段,则获取解析字段的静态属性和动态表达式值。
根据字段的数据长度判定方式来选择对应的算法来计算其数据长度。
判断字段是否解析,若解析则识别字段的数据类型,并按照数据长度读取对应字节进行解析,否则结束解析。
在字段解析完毕后,判断字段是否导出。若导出,则识别字段的导出类型,并按照字段的数据类型导出成对应的JSON数据格式,否则结束解析。
作为优选,使用JSON结构来存储协议的结构信息和每个字段的解析结果数据。同时,JSON作为一种通用数据结构,可被多种语言解析,能够便利地实现跨平台共享。
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
一种基于自定义协议描述语言的网络流量还原方法,通过使用协议描述语法定义网络协议结构和内部字段类型,并存放于配置文件中。实现的协议解析器可将配置文件内的协议描述逐个解析生成为协议模板交由协议模板库维护。具有很好的可扩展性和灵活性。
如图1所示,包括配置文件管理模块1,流量输入模块2,协议解析器3,其内部包括解析引擎4、协议模板库5、执行引擎6和导出引擎7。
配置文件管理模块1负责统一管理所有存放协议描述的配置文件,支持动态加载和卸载协议描述配置文件。
流量输入模块2负责抓取网络流量,并封装成标准协议解析器流量数据输入格式。然后将其传输给协议解析器。
协议解析器3是实现自动化协议解析的核心模块。
解析引擎4负责读取所有存放协议描述的配置文件。将每个协议的描述逐行解析,并生成对应的协议模板。然后将其注册到协议模板库中。协议模板内记录了协议的结构信息和协议内部字段类型等信息。用于后续执行引擎按照协议模板进行网络数据流还原。
协议模板库5统一维护生成的所有协议模板,并支持对这些模板的更新、新增、删除和查找操作。同时负责通过协议描述中定义的下层协议类型来构建协议模板间的关联关系。
执行引擎6负责将网络数据流按照协议模板进行匹配和解析。执行引擎在解析过程中逐个读取协议模板内的字段,并按照字段类型来解析数据流。在解析每个字段时,执行引擎需要处理字段内的静态属性;对于动态表达式,执行引擎需要索引之前解析过的字段值并将其引入表达式进行计算,最终完成动态表达式的解析。
导出引擎7负责将执行引擎中暂存的解析结果转换成JSON数据格式,并按照字段间的嵌套关系将各个字段的解析结果封装成JSON对象来导出。
在本实施例中,协议语法定义实例包括Ethernet定义、IPv4定义、IPv6定义、TCP定义、UDP定义和HTTP定义。
在本实施例中,以IPv4语法描述配置文件,对其协议结构和内部字段进行定义。
首先是对IPv4的协议类信息定义,包括协议名、协议版本、下层协议类型、上层协议关联字段。
‘!IPv4’:表示开始定义IPv4协议。
‘version:4’:表示定义IPv4协议的版本。
‘from:EthernetII/0x0800’:表示定义IPv4的下层协议为EthernetII,其关联字段值为0x0800。
‘next:protocol’:表示定义IPv4协议的上层协议关联字段为protocol字段。
接着是根据IPv4的网络协议包格式,对其内部字段的结构和属性进行定义。其协议内部字段包括版本号、头部长度、服务类型、总长度、标识符、标记、分段偏移量、存活时间、上层协议、头部校验码、源地址、目的地址、可选项和填充项字段。
其中字段分为基本字段和结构字段。基本字段是用于描述协议内具有现实含义的最小单位,而结构字段用于描述协议内的可变的结构信息。IPv4中基本字段为版本号、头部长度、服务类型、总长度、标识符、标记、分段偏移量、存活时间、上层协议、头部校验码、源地址、目的地址。而结构字段为可选项和填充项字段。它们的存在条件是头部字段长度大于4。
其次可根据字段信息的重要程度来划分字段解析粒度,直至划分到基本字段类型。例如,如果需要关注服务质量的差分服务代码点,可将服务类型字段继续拆分至差异化服务编码点和显式拥塞通知字段。如果无需关注可选项和填充项字段,可将选项和填充项字段合并为其他字段。本实施例中将IPv4协议定义为由版本号、头部长度、差异化服务编码点、显式拥塞通知、总长度、标识符、标记、分段偏移量、存活时间、上层协议、头部校验码、源地址、目的地址和选项字段组成。
接着是IPv4内字段的属性定义。在本实施例中,协议描述语法提供了多种属性用于描述字段。其定义如下表所示:
在本实施例中,IPv4内字段的属性定义如下所示:
版本号长度为4位,命名为version,还原后的数据类型为数字型;
头部长度占用4位,命名为IHL,还原后的数据类型为数字型;
差异化服务编码点占用6位,命名为DSCP,还原后的数据类型为数字型;
显式拥塞通知占用2位,命名为ECN,还原后的数据类型为数字型;
总长度占用16位,命名为totalLength,还原后的数据类型为数字型;
标识符占用16位,命名为identification,还原后的数据类型为数字型;
标记占用3位,命名为flags,还原后的数据类型为数字型;
分段偏移量占用13位,命名为fragmentOffset,还原后的数据类型为数字型;
存活时间占用8位,命名为TTL,还原后的数据类型为数字型;
上层协议占用8位,命名为protocol,还原后的数据类型为数字型;
头部校验码占用16位,命名为checksum,还原后的数据类型为数字型;
源地址占用32位,命名为srcIP,还原后的数据类型为ipv4型字符串;
目的地址占用32位,命名为dstIP,还原后的数据类型为ipv4型字符串;
由于选项字段的存在取决于总长度字段值,当数值大于5时,表示IPV4协议存在选项字段。因此选项字段需通过IF结构字段来表示。
其语法描述内容如下:
TCP语法描述配置文件内的协议结构和内部字段的定义如下:
首先是对TCP的协议类信息定义,包括协议名、协议版本、下层协议类型、上层协议关联字段。
‘!TCP’:表示开始定义TCP协议。
‘version:1’:表示定义TCP协议的版本。
‘from:IPv4/6,IPv6/6’:表示定义TCP的下层协议为IPv4或IPv6,其关联字段值为6。
‘next:srcPort|dstPort’:表示定义TCP协议的上层协议关联字段为srcPort字段或dstPort字段。
接着是根据TCP的网络协议包格式,对其内部字段的结构和属性进行定义。其协议内部字段包括源端口、目的端口、序列号、应答号、偏移、无效字段、标志位字段、窗口大小、检验码字段、紧急指针和选项字段。
接着是TCP内字段的属性定义,:
源端口长度为16位,命名为srcPort,还原后的数据类型为数字型;
目的端口长度为16位,命名为dstPort,还原后的数据类型为数字型;
序列号长度占用32位,命名为seqNumber,还原后的数据类型为数字型;
应答号长度占用32位,命名为ACKNumber,还原后的数据类型为数字型;
偏移占用4位,命名为offset,还原后的数据类型为数字型;
无效字段占6位,跳过不解析;
标志位字段占6位,命名为index,还原后的数据类型为数字型;
窗口大小占用16位,命名为windowSize,还原后的数据类型为数字型;
校验码占用16位,命名为checksum,还原后的数据类型为数字型;
紧急指针占用16位,命名为urgentPointer,还原后的数据类型为数字型;
由于选项字段的存在取决于总长度字段值,当数值大于5时,表示TCP协议存在选项字段。因此选项字段需通过IF结构字段来表示。
其语法描述内容如下:
Ethernet语法描述配置文件内的协议结构和内部字段的定义如下:
首先是对Ethernet的协议类信息定义,包括协议名、协议版本、上层协议关联字段。
‘!Ethernet’:表示开始定义Ethernet协议。
‘version:2’:表示定义Ethernet协议的版本。
next:type:表示定义Ethernet协议的上层协议关联字段为type字段。
接着是根据Ethernet的网络协议包格式,对其内部字段的结构和属性进行定义。其协议内部字段包括目的Mac地址、源Mac地址、类型字段。
接着是Ethernet内字段的属性定义:
目的Mac地址长度为48位,命名为dstMac,还原后的数据类型为mac型;
源Mac地址长度为48位,命名为srcMac,还原后的数据类型为mac型;
类型占用16位,命名为type,还原后的数据类型为数字型;
其语法描述内容如下:
如图2所示,配置文件管理模块执行以下步骤S1。加载所有协议的配置文件,注册到配置文件管理表中。
步骤S1具体包括:
用户使用自定义协议描述语法对所要解析的协议进行定义,并将描述内容保存到配置文件中。然后在配置文件管理模块中设置配置文件所在目录并启动。
配置文件管理模块读取指定目录下所有协议的配置文件并进行格式化处理,包括删除注释信息、空行和每行多余的空格,并提取配置文件内的协议名和版本号。将其注册到协议管理表内,其结构和示例如下:
name | version | Path |
Ethernet | 2 | /home/config/ethernet |
IPv4 | 4 | /home/config/ipv4 |
TCP | 1 | /home/config/tcp |
然后将格式化后的标准配置文件内容输入交由解析引擎来生成协议模板。标准配置文件内容输入结构如下:
同时启动一个任务线程定时扫描目录下的所有配置文件来捕获目录下配置文件的增加、删除和文件内协议名或版本的更新操作。当操作发生时同步更新协议管理表内对应协议信息。然后将协议管理表内的变更信息发送给协议模板库,并在协议模板库中同步执行动态加载、卸载和更新协议模板操作。
步骤S2具体包括:
解析引擎4执行步骤S2。读取协议的标准配置文件内容输入,并逐行进行解析。对于每行描述内容,解析引擎首先提取行操作,并根据行操作类型生成对应的结构体对象。共有5种行操作,包括基本字段定义、if字段定义、switch字段定义、for字段定义和while字段定义。
字段结构如下所示:
对于基本字段定义,解析引擎根据基本字段属性定义为结构体内的属性变量进行赋值,并建立动态表达式所关联字段的索引。
其结构如下:
对于if字段,解析引擎建立用于确定分支的动态表达式所关联字段的索引。然后对于true分支和false分支内的字段数组递归向下继续解析。
其结构如下:
对于switch字段,解析引擎建立用于确定分支的字段的索引,然后对于分支数组内的字段递归向下解析。
其结构如下:
对于for字段,解析引擎建立用于确定循环次数的动态表达式所关联字段的索引,然后对于循环体字段数组内的字段递归向下继续解析。
其结构如下:
对于while字段,解析引擎建立用于确定循环是否继续的动态表达式所关联字段的索引,然后对于循环体字段数组内的字段递归向下继续解析。
其结构如下:
当协议内所有字段对应的结构体对象全部构建完毕后,解析引擎将结构体对象按照字段的嵌套与顺序关系进行组装来生成协议模板对象,并交由协议模板库进行管理。
协议模板结构如下所示:
以TCP协议为例,生成的协议模板对象结构如下所示:
其中TCP的字段数组中包含基本字段和一个if字段。以srcPort字段为例,基本字段的结构如下:
本实例中以getOption字段为例展示if字段的结构,其结构如下所示:
协议模板库5执行步骤S3。将协议模板添加到注册表中进行统一管理。并对外提供可调用的增删改查接口,以实现协议模板的动态加载、卸载、更新和查找操作。同时,协议模板库会扫描所有协议模板的下层协议类型属性,然后利用查找接口查询模板库中是否存在对应的下层协议。若存在,则将两个协议进行连接。从而构建协议间的层级关联关系。
以IPv4和TCP两个协议模板关联为例:在构建TCP模板时,其定义的下层协议模板名为"IPv4",则通过协议模板库提供的查询接口通过协议名查找到对应的IPv4的协议模板。然后定义TCP的下层协议类型属性为IPv4协议模板。
流量输入模块2执行步骤S4。在获取原始网络流输入数据后,将其封装成解析引擎所接受的标准网络流输入。
结构如下所示:
流量输入模块在内存中预申请了一块大内存空间用于缓存原始流量数据。流量输入模块会生成一个结构体对象来封装存储每个数据包,并赋值属性信息。封装好的标准网络流输入会被提供给执行引擎进行协议解析。
执行引擎6的结构如下所示:
本实例以Ethernet和IPv4协议解析为例,执行引擎6执行的流程包括以下步骤:
S5.执行引擎首先从流量输入模块获取一个标准网络流输入对象。并设置该对象为带解析的标准网络流输入。初始化设置网络流解析位置为原始字节流的第一个字节。以及设置剩余解析比特数为原始字节流的字节长度乘以8。然后执行引擎读取标准网络流输入对象的协议类型为Ethernet。并通过调用协议模板库的查询接口获取Ethernet协议模板。接着设置参照的协议模板属性。并将协议模板中字段数组的第一个字段dstMac设为当前要解析的字段。若未能在模板库中找到所需的协议模板,则抛出异常;否则继续向下执行S6。
S6.在完成网络流输入对象和协议模板的相关初始化设置后,执行引擎会执行一个循环逻辑,即读取当前要解析的字段,并按照字段的类型和属性解析当前字节流数据。然后生成一个临时结果对象。在每次循环开始时会判断是否存在还未解析的字段,若存在则执行S7,若不存在则执行S11。
S7.执行引擎根据协议模板内字段类型执行对应的解析逻辑。分为三种情况,若为基本字段,则执行S8;若为分支字段则执行S9;若为循环字段则执行S10。如果无法判断字段类型则抛出异常。
如图3所示,执行引擎在解析基本字段时执行步骤S8。
步骤S8具体包括:
首先读取协议模板中的所要解析的基本字段。然后判断该字段是否通过定义value属性来定义字段值。若定义则执行S10;否则执行S3,逐个判断字段是否定义length、endstr和remain属性,并计算字段的数据长度。然后判断字段是否定义jump属性。若定义则表示字段是无效字段,直接跳过,执行S12;否则读取指定长度字节流,并按字段的数据类型进行解析。然后处理trans属性进行大小端转换。之后执行引擎生成一个临时解析结果对象来缓存原始网络流的解析结果。最后处理offset属性来偏移指向当前原始网络流解析位置的指针。至此,执行引擎完成一个基本字段的解析。
在本实例中,执行引擎根据dstMac字段的属性执行解析流程。首先读取出dstMac字段未定义value属性。接着读取出dstMac字段定义length属性值为48。执行引擎从当前网络流解析位置处读取48bit的数据。然后读取出dstMac字段未定义jump属性,则表示该字段默认不跳过解析。之后读取出dstMac字段未定义trans属性,则表示该字段默认不进行大小端转换。接着执行引擎生成一个mac类型的临时解析结果对象来存储dstMac字段对应的48bit字节流数据。最后执行引擎读取出dstMac字段未定义offset属性,则表示该字段默认解析完毕后进行指针偏移。则执行引擎将当前网络流解析位置向后偏移48bit。并将等于解析比特个数减少48。然后将dstMac字段的临时解析结果加入数组。并读取协议模板来设置下一个要解析的字段为srcMac字段。
S9.执行引擎读取索引字段值并代入分支判定动态表达式进行运算来确定要解析的分支字段数组,并将该字段数组设置为当前解析字段数组,然后返回S6。
在本实例中,执行引擎在解析IPv4的if字段时,读取该字段的分支判定动态表达式为"$1>5"。则执行引擎读取索引数组的下标为1的元素的值,即为offset字段的解析值,并将其代入字符串中。然后通过字符串表达式运算来得到判断结果。并根据判断结果来选择解析数组是true分支数组还是false分支数组。
S10.执行引擎读取索引字段值并代入循环判定动态表达式进行运算来确定是否执行循环字段数组,若执行则将循环体内的字段数组设为当前解析字段数组并返回S6;若不执行则直接返回S6。
若该层协议解析完毕,执行引擎判断协议是否存在上层协议关联字段。若存在则在协议模板库内查询与其连接协议模板,并根据关联字段的值进行匹配。若找到,则生成使用新的协议模板继续解析后续网络流数据。若字段还原失败,或者未匹配到对应的协议模板,都会导致执行引擎终止解析。并导出所有协议的临时结果对象。
在本实例中,执行引擎在解析完Ethernet中所有字段的解析后,判断Ethernet的上层协议关联字段为type。执行引擎读取type字段的解析值。然后从协议模板库中获取所有与Ethernet关联的协议,包括IPv4协议。则判断IPv4的下层协议类型中Ethernet的匹配值为0x0800是否等于type字段的解析值。若是则下一个要解析的协议为IPv4协议;否则不是。
导出引擎7执行步骤S11。导出引擎读取临时结果对象,将对象的数据类型其转成JSON数据类型,并按照字段的嵌套关系组装成JSON格式。
在本实例中,以IPv4协议解析结果为例,对应的JSON解析结果格式如下所示:
应理解,实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
Claims (7)
1.一种基于自定义协议描述语言的网络流量还原方法,其特征在于,包括:
步骤1,使用自定义协议描述语言,定义所要解析的网络协议的结构和内部字段,存入配置文件;将所有配置文件格式化为标准配置文件,并注册到配置文件管理模块;
步骤2,读取标准配置文件,解析并生成协议模板;
步骤3,将协议模板注册到协议模板库,构建上、下层级协议的关联关系;
步骤4,获取原始网络流数据,封装成标准网络流;
步骤5,读取标准网络流,根据上、下层级协议的关联关系,从协议模板库中匹配对应的协议模板;
步骤6,对匹配成功的标准网络流,根据协议模板内字段类型执行对应的解析逻辑,进行流量还原;
步骤7,将流量还原的结果导出。
2.根据权利要求1所述的一种基于自定义协议描述语言的网络流量还原方法,其特征在于,步骤1中,所述自定义协议描述语言,包括协议类、字段类、属性类和动态表达式类信息;其中,
协议类信息包括协议名、协议版本、下层协议类型、上层协议关联字段;
字段类信息包括基本类型字段、分支类型字段、循环类型字段;
属性类信息包括字段名、字段的数据长度、字段的解析类型、字段的导出类型,字段的数据长度判定方式、字段是否解析、字段是否导出;
动态表达式类信息为:数值表达式和布尔表达式;所述表达式由表达式括号、运算符、字段引用符和字段名组成。
3.根据权利要求2所述的一种基于自定义协议描述语言的网络流量还原方法,其特征在于,所述分支类型字段包括if字段和switch字段;其中,if字段由布尔动态表达式和真假两个分支组成;switch字段由分支判定字段和分支集合组成;
所述循环类型字段包括for字段和while字段;其中,for字段由数值动态表达式和字段数组组成;while字段由布尔动态表达式和字段数组组成。
4.根据权利要求1所述的一种基于自定义协议描述语言的网络流量还原方法,其特征在于,所述步骤2具体为:
读取标准配置文件,逐行解析协议描述;
按照协议描述中的字段类型逐个字段创建对象,并初始化字段的静态属性信息和动态表达式信息;
根据动态表达式中的字段引用关系将字段进行连接;
将字段按照协议定义中的嵌套关系组装成协议模板。
5.根据权利要求1所述的一种基于自定义协议描述语言的网络流量还原方法,其特征在于,所述步骤3具体过程为:
将协议模板注册到协议模板库;
根据协议定义的上层协议关联字段对其模板内的字段进行标识,并在协议模板库中注册该协议和关联字段信息;
解析协议的下层协议关联信息中的协议类型,并在协议模板库中查询是否存在对应的协议模板,若存在则将二者连接,得到上、下层级协议的关联关系。
6.根据权利要求1所述的一种基于自定义协议描述语言的网络流量还原方法,其特征在于,所述步骤6,根据协议模板内字段类型执行对应的解析逻辑,进行流量还原,具体为:
根据字段类型选择执行逻辑:对于基本字段,则获取解析字段的静态属性和动态表达式值;对于分支字段,根据动态表达式来选择具体解析分支内的字段数组;对于循环字段,根据动态表达式来确定循环体内字段数组的解析次数;
根据字段的数据长度判定方式来计算其数据长度;
判断字段是否解析,若解析则识别字段的数据类型,并按照数据长度读取对应字节进行解析,得到解析结果。
7.根据权利要求1所述的一种基于自定义协议描述语言的网络流量还原方法,其特征在于,所述步骤7,将流量还原的结果导出,具体为:使用JSON结构,存储流量还原后的协议的结构信息和每个字段的解析结果数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211548448.8A CN116016345B (zh) | 2022-12-05 | 2022-12-05 | 一种基于自定义协议描述语言的网络流量还原方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211548448.8A CN116016345B (zh) | 2022-12-05 | 2022-12-05 | 一种基于自定义协议描述语言的网络流量还原方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116016345A true CN116016345A (zh) | 2023-04-25 |
CN116016345B CN116016345B (zh) | 2024-10-18 |
Family
ID=86028862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211548448.8A Active CN116016345B (zh) | 2022-12-05 | 2022-12-05 | 一种基于自定义协议描述语言的网络流量还原方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116016345B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118426752A (zh) * | 2024-07-01 | 2024-08-02 | 之江实验室 | 一种基于网络编程语言的逻辑表示的转换方法和装置 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100322266A1 (en) * | 2008-02-28 | 2010-12-23 | Thomson Licensing | Hardware-based parser for packet-oriented protocols |
US20160191306A1 (en) * | 2014-12-27 | 2016-06-30 | Iosif Gasparakis | Programmable protocol parser for nic classification and queue assignments |
CN106657075A (zh) * | 2016-12-26 | 2017-05-10 | 东软集团股份有限公司 | 多层协议解析方法、装置及数据匹配方法和装置 |
CN108696381A (zh) * | 2017-04-12 | 2018-10-23 | 腾讯科技(深圳)有限公司 | 一种协议配置方法及装置 |
CN109842629A (zh) * | 2019-03-03 | 2019-06-04 | 北京立思辰安科技术有限公司 | 基于协议解析框架的自定义协议的实现方法 |
CN110457526A (zh) * | 2019-07-31 | 2019-11-15 | 南京理工大学 | 基于xml文件的通用化数据解析方法 |
CN114513566A (zh) * | 2022-02-17 | 2022-05-17 | 上海阅维科技股份有限公司 | 自定义网络协议解析方法、系统、介质及电子设备 |
CN114629970A (zh) * | 2022-01-14 | 2022-06-14 | 华信咨询设计研究院有限公司 | 一种tcp/ip流量还原方法 |
CN114938401A (zh) * | 2022-03-21 | 2022-08-23 | 北京思信飞扬信息技术股份有限公司 | 可配置的网络协议数据解析方法及电子设备 |
CN115134432A (zh) * | 2021-03-22 | 2022-09-30 | 中国科学院沈阳自动化研究所 | 一种多工业通信协议自适应快速解析方法 |
CN115242896A (zh) * | 2022-07-29 | 2022-10-25 | 宁波三星医疗电气股份有限公司 | 动态报文解析方法、装置、电子设备及计算机可读存储介质 |
-
2022
- 2022-12-05 CN CN202211548448.8A patent/CN116016345B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100322266A1 (en) * | 2008-02-28 | 2010-12-23 | Thomson Licensing | Hardware-based parser for packet-oriented protocols |
US20160191306A1 (en) * | 2014-12-27 | 2016-06-30 | Iosif Gasparakis | Programmable protocol parser for nic classification and queue assignments |
CN106657075A (zh) * | 2016-12-26 | 2017-05-10 | 东软集团股份有限公司 | 多层协议解析方法、装置及数据匹配方法和装置 |
CN108696381A (zh) * | 2017-04-12 | 2018-10-23 | 腾讯科技(深圳)有限公司 | 一种协议配置方法及装置 |
CN109842629A (zh) * | 2019-03-03 | 2019-06-04 | 北京立思辰安科技术有限公司 | 基于协议解析框架的自定义协议的实现方法 |
CN110457526A (zh) * | 2019-07-31 | 2019-11-15 | 南京理工大学 | 基于xml文件的通用化数据解析方法 |
CN115134432A (zh) * | 2021-03-22 | 2022-09-30 | 中国科学院沈阳自动化研究所 | 一种多工业通信协议自适应快速解析方法 |
CN114629970A (zh) * | 2022-01-14 | 2022-06-14 | 华信咨询设计研究院有限公司 | 一种tcp/ip流量还原方法 |
CN114513566A (zh) * | 2022-02-17 | 2022-05-17 | 上海阅维科技股份有限公司 | 自定义网络协议解析方法、系统、介质及电子设备 |
CN114938401A (zh) * | 2022-03-21 | 2022-08-23 | 北京思信飞扬信息技术股份有限公司 | 可配置的网络协议数据解析方法及电子设备 |
CN115242896A (zh) * | 2022-07-29 | 2022-10-25 | 宁波三星医疗电气股份有限公司 | 动态报文解析方法、装置、电子设备及计算机可读存储介质 |
Non-Patent Citations (3)
Title |
---|
BILL ALLCOCK等: "Secure, Efficient Data Transport and Replica Management for High-Performance Data-Intensive Computing", 2001 EIGHTEENTH IEEE SYMPOSIUM ON MASS STORAGE SYSTEMS AND TECHNOLOGIES, 11 December 2006 (2006-12-11) * |
文奕等: "面向安全分析的大规模网络下的DNS流量还原系统", 万方, 21 June 2019 (2019-06-21) * |
梁成军;江昊;吴静;: "基于统一描述的网络仿真场景高效建模机制", 计算机工程与应用, no. 07, 1 April 2018 (2018-04-01) * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118426752A (zh) * | 2024-07-01 | 2024-08-02 | 之江实验室 | 一种基于网络编程语言的逻辑表示的转换方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116016345B (zh) | 2024-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6836890B1 (en) | Methods and systems for message translation and parsing of data structures in a distributed component architecture | |
US7908594B2 (en) | External programmatic interface for IOS CLI compliant routers | |
US7299282B2 (en) | State processor for pattern matching in a network monitor device | |
US6651099B1 (en) | Method and apparatus for monitoring traffic in a network | |
US7721304B2 (en) | Method and apparatus providing programmable network intelligence | |
CN108881251B (zh) | 一种任意二进制设备接入解析与标准化的系统及方法 | |
US20040068681A1 (en) | Building packets of data | |
CN115086449A (zh) | 一种数据解析方法、装置及计算机可读存储介质 | |
CN116016345B (zh) | 一种基于自定义协议描述语言的网络流量还原方法 | |
CN113887173B (zh) | 一种基于xml的协议动态组包和解析方法 | |
CN113079198B (zh) | 一种云平台接口协议转换的方法及装置 | |
CN110083746B (zh) | 一种基于字符串的快速匹配识别方法和装置 | |
CN110266702A (zh) | 基于XML的Wireshark用协议解析方法 | |
CN110912782A (zh) | 一种数据采集方法、装置及存储介质 | |
CN113347196A (zh) | 一种对网络数据进行解析的解析方法、装置、电子设备以及存储介质 | |
AU2021282463A1 (en) | Method for verifying vulnerabilities of network devices using CVE entries | |
CN117714562A (zh) | 一种网络通信协议语法信息的自动化提取方法及系统 | |
CN110839022A (zh) | 一种基于xml语言的车载控制软件通信协议解析方法 | |
US9577669B2 (en) | Methods, systems, and computer readable media for optimized message decoding | |
CN114629970B (zh) | 一种tcp/ip流量还原方法 | |
JP2004252973A (ja) | 客体指向プログラムが記録された貯蔵媒体 | |
US7343597B1 (en) | Methods and apparatus for communication between an application and a device | |
CN116301882A (zh) | 多套模型间集合映射方法与装置 | |
CN113992549B (zh) | 一种测试方法、装置、电子设备及存储介质 | |
CN107342881B (zh) | 一种操作维护中心北向接口数据处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |