CN113887173A - 一种基于xml的协议动态组包和解析方法 - Google Patents

一种基于xml的协议动态组包和解析方法 Download PDF

Info

Publication number
CN113887173A
CN113887173A CN202111218220.8A CN202111218220A CN113887173A CN 113887173 A CN113887173 A CN 113887173A CN 202111218220 A CN202111218220 A CN 202111218220A CN 113887173 A CN113887173 A CN 113887173A
Authority
CN
China
Prior art keywords
node
area
data
protocol
package
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
Application number
CN202111218220.8A
Other languages
English (en)
Other versions
CN113887173B (zh
Inventor
何舒
辜彬
葛泽文
江红
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CETC 30 Research Institute
Original Assignee
CETC 30 Research Institute
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by CETC 30 Research Institute filed Critical CETC 30 Research Institute
Priority to CN202111218220.8A priority Critical patent/CN113887173B/zh
Publication of CN113887173A publication Critical patent/CN113887173A/zh
Application granted granted Critical
Publication of CN113887173B publication Critical patent/CN113887173B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/143Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/146Coding or compression of tree-structured data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/284Lexical analysis, e.g. tokenisation or collocates
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/18Protocol analysers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供一种基于XML的协议动态组包和解析方法,包括:在协议模板的XML文件中定义关键字来表示协议动态组包和解析的交互流程;再通过解析协议模板的XML文件中的关键字来模拟协议动态组包和解析。本发明的有益效果是:1、对于各种自定义协议,只要在协议模板的XML文件中通过关键字对协议格式及业务动作进行定义,即可通过解析XML的关键字实现协议流程交互,即协议动态组包和解析;2、关键字和运算调用的基础函数和业务函数等可根据业务需要进行扩展,兼容性和可扩展性好;3、使用本发明进行实时动态组包和解析,被测设备无需做出任何改动。

Description

一种基于XML的协议动态组包和解析方法
技术领域
本发明涉及协议解析技术领域,具体而言,涉及一种基于XML的协议动态组包和解析方法。
背景技术
当前针对各种通用协议已有较为成熟的测试方法及测试工具。但如果协议格式为自定义的,则少有现成的测试方法可以对其进行协议测试。针对自定义协议,一般采用静态解析的方式验证其数据格式的正确性,但协议交互的异常用例难以构造。如果针对被测协议进行模拟组包,一般就要定制测试工具,把协议流程重新实现一遍。这样的做法不具有通用性,投入产出比较低。如何能根据协议交互过程中的实时数据进行动态组包,最大程度模拟真实协议数据,减少被测设备的改动,就成为成功进行协议动态测试要解决的重要问题。
发明内容
本发明旨在提供一种基于XML的协议动态组包和解析方法,以解决如何能根据协议交互过程中的实时数据进行动态组包,最大程度模拟真实协议数据,减少被测设备的改动的问题。
本发明提供的一种基于XML的协议动态组包和解析方法,包括:
在协议模板的XML文件中定义关键字来表示协议动态组包和解析的交互流程;
再通过解析协议模板的XML文件中的关键字来模拟协议动态组包和解析。
进一步的,通过解析协议模板的XML文件中的关键字来模拟协议动态组包的方法包括如下步骤:
(1)根据传入的协议模板名称及数据包名称,从内存中已加载的协议模板数据中通过匹配<Package>标签找到与传入的数据包名称相同的节点;
(2)依次循环解析数据包节点<Package>的子节点,根据定义的不同关键字进行不同的操作步骤,输出子节点的组包结果;
(3)当数据包节点<Package>节点下的所有子节点处理完成后,将每个子节点的组包结果按照协议模板定义的组包方式进行拼接,得到该数据包的组包结果。
进一步的,协议动态组包的方法中,依次循环解析数据包节点<Package>的子节点,根据定义的不同关键字进行不同的操作步骤,输出该子节点的组包结果的方法包括如下子步骤:
(2.1)若数据包节点<Package>的子节点的节点名为字段<Field>,则进入字段处理流程:根据协议模板中定义的字段属性,采用不同的数据生成方式,得到相应的组包结果;
(2.2)若数据包节点<Package>的子节点的节点名为准备区域<PreArea>,则进入准备区域处理流程:依次将该准备区域<PreArea>的所有子节点定义的数据读取到中间变量列表中,以备后续使用;
(2.3)若数据包节点<Package>的子节点的节点名为私有区域<PriArea>,则进入私有区域处理流程:依次对该私有区域<PriArea>的所有子节点进行处理,该私有区域<PriArea>的子节点为需要运算得出结果的单个字段,将运算结果存入中间变量列表中,仅用于中间数据运算,不计入组包结果;
(2.4)若数据包节点<Package>的子节点的节点名为标识区域<FlagArea>,则进入标识区域处理流程:依次对标识区域<FlagArea>的所有子节点进行处理,并将得到的子节点数据写入一个临时列表中,当该标识区域<FlagArea>的所有子节点处理完毕后,将临时列表中的子节点数据按照指定的数据拼接方式依次拼接,得到一个组包字符串,存入组包结果;
(2.5)若数据包节点<Package>的子节点的节点名为保护区域<ProArea>,则进入保护区域处理流程:依次对保护区域<ProArea>的所有子节点进行处理,并将得到的子节点数据写入一个临时列表中,当该保护区域<ProArea>的所有子节点处理完毕后,将临时列表中的子节点数据按照指定的数据拼接方式依次拼接,得到一个组包字符串,在依次处理完所有子节点得到组包字符串之后,根据协议模板的保护区域运算定义,对该组包字符串进行运算,将运算结果作为最后的组包结果;
(2.6)若数据包节点<Package>的子节点的节点名为循环区域<CycArea>,则进入循环区域处理流程:该循环区域处理流程包括一个嵌套循环,先根据协议模板定义的循环次数确定外层循环次数,再根据循环区域中子节点的个数确定内层循环次数,在内层循环中依次运算子节点的结果,每个子节点的结果会根据协议模板定义运算出固定结果;当两层循环处理完毕,将所有子节点的固定结果拼接得到循环区域的组包结果。
进一步的,当数据包节点<Package>的节点名为标识区域<FlagArea>时,若该标识区域<FlagArea>在后续其他地方参与运算,则通过协议模板定义的引用属性将标识区域<FlagArea>的组包结果写入中间变量列表,后续可以引用该中间变量列表中存储的标识区域<FlagArea>的组包结果,从而将该标识区域<FlagArea>的连续多个数据作为一个整体进行引用。
进一步的,当数据包节点<Package>的节点名为循环区域<CycArea>时,根据协议模板定义,加上内外循环次数作为子节点的结果的文件名后缀,以确保数据的唯一性;再根据协议模板定义,动态读取文件名连续的外部文件数据作为组包结果。
进一步的,通过解析协议模板的XML文件中的关键字来模拟协议动态解析的方法包括如下步骤:
(1)根据传入的协议模板名称及数据包名称,从内存中已加载的协议模板数据中通过匹配<Package>标签找到与传入的数据包名称相同的节点;
(2)依次循环遍历数据包节点<Package>的子节点,对协议模板进行预处理;
(3)协议预处理完成后,再次依次循环解析数据包节点<Package>的子节点,根据不同关键字进行不同的操作步骤,输出子节点的解析结果,并将解析结果记入解析结果列表中;
(4)数据包节点<Package>下的所有子节点处理完成后,将解析结果列表中的解析结果按照顺序依次输出到结果文件中,以备用户查看。
进一步的,对协议模板进行预处理的方法包括如下步骤:
(2.1)若数据包节点<Package>的子节点的节点名为被引用区域<RefArea>,则进入被引用区域处理流程:该被引用区域处理流程将被引用区域整个写入被引用数据中间变量列表中,供调用区域<CallArea>直接引用;
(2.2)若数据包节点<Package>的子节点的节点名为调用区域<CallArea>,则进入调用区域处理流程:该调用区域处理流程将根据该调用区域<CallArea>的节点值获取被引用区域的名称,从调用区域<CallArea>的id属性获取其子节点id的前缀信息,然后将被引用区域的所有子节点的id加上前缀信息进行更新后替换协议模板的调用区域内容。
进一步的,协议动态解析的方法中,依次循环解析数据包节点<Package>的子节点,根据不同关键字进行不同的操作步骤,输出子节点的解析结果的方法包括如下子步骤:
(3.1)若数据包节点<Package>的子节点的节点名为字段<Field>,则进入字段处理流程:根据字段长度及运算出的字段偏移获取字段实际值,或者根据字段分隔符获取字段实际值;若定义了字段预期值,则根据预期值的字段运算方式获取字段预期值;然后将字段实际值与字段预期值进行比对,若一致则流程继续进行,不一致则输出错误信息并终止解析流程;
(3.2)若数据包节点<Package>的子节点的节点名为准备区域<PreArea>,则进入准备区域处理流程:依次将准备区域<PreArea>的所有子节点定义的数据读取到中间变量列表中,以备后续使用;
(3.3)若数据包节点<Package>的子节点的节点名为私有区域<PriArea>,则进入私有区域处理流程:依次对该私有区域<PriArea>的所有子节点进行处理,该私有区域<PriArea>的子节点为需要运算得出结果的单个字段,将运算结果存入中间变量列表中,仅用于中间数据运算,不计入组包结果;
(3.4)若数据包节点<Package>的子节点的节点名为标识区域<FlagArea>,则进入标识区域处理流程:先根据协议模板定义获取该标识区域<FlagArea>的数据,再依次对标识区域<FlagArea>的所有子节点进行处理,并将得到的子节点数据写入一个临时列表中,当该标识区域<FlagArea>的所有子节点处理完毕后,将临时列表中的子节点数据按照顺序输出一个解析字符串到结果文件的XML文件中,便于用户查看;
(3.5)若数据包节点<Package>的子节点的节点名为保护区域<ProArea>,则进入保护区域处理流程:首先,根据保护区域的数据长度获取该保护区域解析前的数据,然后根据保护区域的运算信息子节点<CalcInfo>中定义的运算信息,将保护区域解析前的数据作为运算函数的输入参数,运算后得到解除保护后的数据;然后将解除保护后的数据按照保护区域的具体字段定义依次解析,得到该保护区域数据的最终解析结果;
(3.6)若数据包节点<Package>的子节点的节点名为循环区域<CycArea>,则进入循环区域处理流程:先根据协议模板定义的循环次数,实时动态生成本循环的协议模板,然后再获取循环区域<CycArea>的数据,并按照实时动态生成的本循环的协议模板,依次解析循环区域<CycArea>的各子节点,并输出解析结果;
(3.7)若数据包节点<Package>的子节点的节点名为子模板区域<SubArea>,则进入子模板区域处理流程:该子模板区域处理流程将根据协议模板定义的子模板名称,实时从内存中已加载的协议模板文件中匹配对应的子模板,然后将匹配到的子模板加入子模板临时列表中,以备后续直接引用;
(3.8)若数据包节点<Package>的子节点的节点名为选择区域<SelArea>,则进入选择区域处理流程:通过在协议模板中定义选择条件,及该选择条件下需要跳转的子模板名称,实现协议处理流程的分支判断及处理,满足选择条件则直接从子模板临时列表中匹配对应的子模板进行解析。
进一步的,整个标识区域<FlagArea>的数据,以及该标识区域<FlagArea>中的子节点获取方式一共有两种:
一种是根据该标识区域<FlagArea>的数据长度,以及运算出来的该标识区域<FlagArea>的数据偏移来获取数据,这种类型适用于数据是数值直接拼接的情况;
另一种是根据协议模板定义的分隔符来获取数据,这种类型适用于数据的拼接方式是带有格式的情况。
进一步的,选择条件有两种定义方式:
一种是前面已解析完毕的子节点,则选择条件指定为节点名称;
另一种是还未解析出的子节点,则根据该子节点的数据长度及相对偏移来获取数据。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
1、对于各种自定义协议,只要在协议模板的XML文件中通过关键字对协议格式及业务动作进行定义,即可通过解析XML的关键字实现协议流程交互,即协议动态组包和解析;
2、关键字和运算调用的基础函数和业务函数等可根据业务需要进行扩展,兼容性和可扩展性好;
3、传统方式模拟收发包进行协议测试需要被测设备做出一些改动如:插桩输出数据,屏蔽某些身份认证操作,关闭抗重放功能等。而使用本发明进行实时动态组包和解析,被测设备无需做出任何改动。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例的基于XML的协议动态组包和解析方法的流程图。
图2为本发明实施例的模拟协议动态组包的流程图。
图3为本发明实施例的模拟协议动态组包的字段处理流程的流程图。
图4为本发明实施例的模拟协议动态解析的流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
如图1所示,本实施例提出一种基于XML的协议动态组包和解析方法,包括:
在协议模板的XML文件中定义关键字来表示协议动态组包和解析的交互流程;
再通过解析协议模板的XML文件中的关键字来模拟协议动态组包和解析。
具体地:
如图2所示,通过解析协议模板的XML文件中的关键字来模拟协议动态组包的方法包括如下步骤:
(1)根据传入的协议模板名称及数据包名称,从内存中已加载的协议模板数据中通过匹配<Package>标签找到与传入的数据包名称相同的节点。
(2)依次循环解析数据包节点<Package>的子节点,根据定义的不同关键字进行不同的操作步骤,输出子节点的组包结果:
(2.1)若数据包节点<Package>的子节点的节点名为字段<Field>,则进入字段处理流程:根据协议模板中定义的字段属性,采用不同的数据生成方式,得到相应的组包结果。如图3所示,其中:
(2.1.1)若数据生成方式为“数值”,则读取该字段的XML节点的值作为数据结果,但在输出该数据结果前,要先根据定义的数据类型及数据长度进行必要的数据填充及数据类型转换。若该数据结果在协议模板中定义为后续要被引用,还应将该数据结果以key-value的形式写入中间变量列表,以便后续从中间变量列表获取该数据结果。
(2.1.2)若该数据生成方式为“文件”,则从该字段的XML节点的值获取文件名,并从配置文件中指定的数据文件路径中读取指定文件名的文件,将文件内容作为组包结果。若该文件定义了递增后缀属性,还可以在固定的文件名后动态添加后缀,满足依次循环读取多个文件的需求。
(2.1.3)若该数据生成方式为“运算”,则根据其运算子节点<CalcInfo>的定义中获取运算相关信息(主要是外部函数名及输入输出参数定义),进行运算,将输出参数的数值或者函数返回值作为组包结果,两种方式通过运算子节点的输出数据属性来指定。
(2.1.4)若该数据生成方式为“引用数据”,则从该字段的XML节点的值获取被引用字段的名称,然后在中间变量列表中匹配名称相同的字段,取其字段值作为组包结果;
(2.1.5)若该数据生成方式为“引用长度”,则从该字段的XML节点的值获取被引用字段的名称,然后在中间变量列表中匹配名称相同的字段,取其字段长度作为组包结果;
(2.1.6)若该数据生成方式为“随机数”,则调用随机函数,生成指定长度的随机数作为组包结果;
(2.1.7)若该数据生成方式为“递增数”,则根据该字段的“递增初始值”和“递增步长”两个属性计算其递增结果,作为组包结果;
(2.1.8)若该数据生成方式为“系统时间”,则获取当前系统时间作为组包结果。
(2.2)若数据包节点<Package>的子节点的节点名为准备区域<PreArea>,则进入准备区域处理流程:依次将该准备区域<PreArea>的所有子节点定义的数据(主要是文件数据以及少量常量数据)读取到中间变量列表中,以备后续使用;
(2.3)若数据包节点<Package>的子节点的节点名为私有区域<PriArea>,则进入私有区域处理流程:依次对该私有区域<PriArea>的所有子节点进行处理,该私有区域<PriArea>的子节点为需要运算得出结果的单个字段,将运算结果存入中间变量列表中,仅用于中间数据运算,不计入组包结果;
(2.4)若数据包节点<Package>的子节点的节点名为标识区域<FlagArea>,则进入标识区域处理流程:依次对标识区域<FlagArea>的所有子节点进行处理,并将得到的子节点数据写入一个临时列表中,当该标识区域<FlagArea>的所有子节点处理完毕后,将临时列表中的子节点数据按照指定的数据拼接方式依次拼接,得到一个组包字符串,存入组包结果;在一些实例中,若该标识区域<FlagArea>在后续其他地方参与运算,则通过协议模板定义的引用属性将标识区域<FlagArea>的组包结果写入中间变量列表,后续可以引用该中间变量列表中存储的标识区域<FlagArea>的组包结果,从而将该标识区域<FlagArea>的连续多个数据作为一个整体进行引用。
(2.5)若数据包节点<Package>的子节点的节点名为保护区域<ProArea>,则进入保护区域处理流程:该保护区域处理流程与标识区域处理流程类似,但在依次处理完所有子节点得到组包字符串之后,要根据协议模板的保护区域运算定义,对该组包字符串进行运算,将运算结果作为最后的组包结果;即依次对保护区域<ProArea>的所有子节点进行处理,并将得到的子节点数据写入一个临时列表中,当该保护区域<ProArea>的所有子节点处理完毕后,将临时列表中的子节点数据按照指定的数据拼接方式依次拼接,得到一个组包字符串,在依次处理完所有子节点得到组包字符串之后,根据协议模板的保护区域运算定义,对该组包字符串进行运算,将运算结果作为最后的组包结果;
(2.6)若数据包节点<Package>的子节点的节点名为循环区域<CycArea>,则进入循环区域处理流程:该循环区域处理流程包括一个嵌套循环,先根据协议模板定义的循环次数确定外层循环次数,再根据循环区域中子节点的个数确定内层循环次数,在内层循环中依次运算子节点的结果,每个子节点的结果会根据协议模板定义运算出固定结果;当两层循环处理完毕,将所有子节点的固定结果拼接得到循环区域的组包结果。在一些实施例中,当数据包节点<Package>的节点名为循环区域<CycArea>时,根据协议模板定义,加上内外循环次数作为子节点的结果的文件名后缀,以确保数据的唯一性;再根据协议模板定义,动态读取文件名连续的外部文件数据作为组包结果。
(3)当数据包节点<Package>节点下的所有子节点处理完成后,将每个子节点的组包结果按照协议模板定义的组包方式进行拼接,得到该数据包的组包结果。
如图4所示,通过解析协议模板的XML文件中的关键字来模拟协议动态解析的方法包括如下步骤:
(1)根据传入的协议模板名称及数据包名称,从内存中已加载的协议模板数据中通过匹配<Package>标签找到与传入的数据包名称相同的节点;
(2)依次循环遍历数据包节点<Package>的子节点,对协议模板进行预处理;预处理的主要内容是将调用区域的定义替换为被引用区域的内容,以保证相同的协议子模版在协议模板的被引用区域中定义一次后,通过调用区域多次引用;具体包括如下子步骤:
(2.1)若数据包节点<Package>的子节点的节点名为被引用区域<RefArea>,则进入被引用区域处理流程:该被引用区域处理流程将被引用区域整个写入被引用数据中间变量列表中,供调用区域<CallArea>直接引用;
(2.2)若数据包节点<Package>的子节点的节点名为调用区域<CallArea>,则进入调用区域处理流程:该调用区域处理流程将根据该调用区域<CallArea>的节点值获取被引用区域的名称,从调用区域<CallArea>的id属性获取其子节点id的前缀信息,然后将被引用区域的所有子节点的id加上前缀信息进行更新后替换协议模板的调用区域内容,将被引用区域的所有子节点的id加上前缀信息是为避免被引用区域在多处被引用后id不唯一的问题。
(3)协议预处理完成后,再次依次循环解析数据包节点<Package>的子节点,根据不同关键字进行不同的操作步骤,输出子节点的解析结果,并将解析结果记入解析结果列表中;其中,被引用区域以及调用区域的内容不处理,直接跳过。具体步骤如下:
(3.1)若数据包节点<Package>的子节点的节点名为字段<Field>,则进入字段处理流程:根据字段长度及运算出的字段偏移获取字段实际值,或者根据字段分隔符获取字段实际值;若定义了字段预期值,则根据预期值的字段运算方式获取字段预期值(与组包时的数据生成方式定义及处理类似);然后将字段实际值与字段预期值进行比对,若一致则流程继续进行,不一致则输出错误信息并终止解析流程;
(3.2)若数据包节点<Package>的子节点的节点名为准备区域<PreArea>,则进入准备区域处理流程:依次将准备区域<PreArea>的所有子节点定义的数据(主要是文件数据以及少量常量数据)读取到中间变量列表中,以备后续使用;
(3.3)若数据包节点<Package>的子节点的节点名为私有区域<PriArea>,则进入私有区域处理流程:依次对该私有区域<PriArea>的所有子节点进行处理,该私有区域<PriArea>的子节点为需要运算得出结果的单个字段,将运算结果存入中间变量列表中,仅用于中间数据运算,不计入组包结果;
(3.4)若数据包节点<Package>的子节点的节点名为标识区域<FlagArea>,则进入标识区域处理流程:先根据协议模板定义获取该标识区域<FlagArea>的数据,再依次对标识区域<FlagArea>的所有子节点进行处理,并将得到的子节点数据写入一个临时列表中,当该标识区域<FlagArea>的所有子节点处理完毕后,将临时列表中的子节点数据按照顺序输出一个解析字符串到结果文件的XML文件中,便于用户查看;若该标识区域<FlagArea>在后续其他地方参与运算,也可通过协议模板的引用属性定义将输出的解析字符串写入中间变量列表,后续可以直接引用该解析字符串。整个标识区域<FlagArea>的数据,以及该标识区域<FlagArea>中的子节点获取方式一共有两种:
一种是根据该标识区域<FlagArea>的数据长度,以及运算出来的该标识区域<FlagArea>的数据偏移来获取数据,这种类型适用于数据是数值直接拼接的情况;
另一种是根据协议模板定义的分隔符来获取数据,这种类型适用于数据的拼接方式是带有格式的情况。
(3.5)若数据包节点<Package>的子节点的节点名为保护区域<ProArea>,则进入保护区域处理流程:首先,根据保护区域的数据长度获取该保护区域解析前的数据,然后根据保护区域的运算信息子节点<CalcInfo>中定义的运算信息,将保护区域解析前的数据作为运算函数的输入参数,运算后得到解除保护后的数据(此处保护区域解析前的数据可理解为协议对端加密后的密文数据,解除保护后的数据则为本端解密后的明文数据);然后将解除保护后的数据按照保护区域的具体字段定义依次解析,得到该保护区域数据的最终解析结果;
(3.6)若数据包节点<Package>的子节点的节点名为循环区域<CycArea>,则进入循环区域处理流程:先根据协议模板定义的循环次数,实时动态生成本循环的协议模板,例如:循环5次,则将协议模板中循环区域<CycArea>的子节点依次复制到5次,并根据循环次数动态更新其字段ID等保证字段在模板中的唯一性。然后再获取循环区域<CycArea>的数据,并按照实时动态生成的本循环的协议模板,依次解析循环区域<CycArea>的各子节点,并输出解析结果;
(3.7)若数据包节点<Package>的子节点的节点名为子模板区域<SubArea>,则进入子模板区域处理流程:该子模板区域处理流程将根据协议模板定义的子模板名称,实时从内存中已加载的协议模板文件中匹配对应的子模板,然后将匹配到的子模板加入子模板临时列表中,以备后续直接引用;
(3.8)若数据包节点<Package>的子节点的节点名为选择区域<SelArea>,则进入选择区域处理流程:该选择区域处理流程类似于编程语言中的if…else…语句,通过在协议模板中定义选择条件,及该选择条件下需要跳转的子模板名称,实现协议处理流程的分支判断及处理,满足选择条件则直接从子模板临时列表中匹配对应的子模板进行解析;其中选择条件有两种定义方式:
一种是前面已解析完毕的节点(已存入中间变量列表中),则选择条件指定为节点名称;
另一种是还未解析出的节点,则根据该节点的数据长度及相对偏移来获取数据。
(4)数据包节点<Package>下的所有子节点处理完成后,将解析结果列表中的解析结果按照顺序依次输出到结果文件中,以备用户查看。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于XML的协议动态组包和解析方法,其特征在于,包括:
在协议模板的XML文件中定义关键字来表示协议动态组包和解析的交互流程;
再通过解析协议模板的XML文件中的关键字来模拟协议动态组包和解析。
2.根据权利要求1所述的基于XML的协议动态组包和解析方法,其特征在于,通过解析协议模板的XML文件中的关键字来模拟协议动态组包的方法包括如下步骤:
(1)根据传入的协议模板名称及数据包名称,从内存中已加载的协议模板数据中通过匹配<Package>标签找到与传入的数据包名称相同的节点;
(2)依次循环解析数据包节点<Package>的子节点,根据定义的不同关键字进行不同的操作步骤,输出子节点的组包结果;
(3)当数据包节点<Package>节点下的所有子节点处理完成后,将每个子节点的组包结果按照协议模板定义的组包方式进行拼接,得到该数据包的组包结果。
3.根据权利要求2所述的基于XML的协议动态组包和解析方法,其特征在于,协议动态组包的方法中,依次循环解析数据包节点<Package>的子节点,根据定义的不同关键字进行不同的操作步骤,输出该子节点的组包结果的方法包括如下子步骤:
(2.1)若数据包节点<Package>的子节点的节点名为字段<Field>,则进入字段处理流程:根据协议模板中定义的字段属性,采用不同的数据生成方式,得到相应的组包结果;
(2.2)若数据包节点<Package>的子节点的节点名为准备区域<PreArea>,则进入准备区域处理流程:依次将该准备区域<PreArea>的所有子节点定义的数据读取到中间变量列表中,以备后续使用;
(2.3)若数据包节点<Package>的子节点的节点名为私有区域<PriArea>,则进入私有区域处理流程:依次对该私有区域<PriArea>的所有子节点进行处理,该私有区域<PriArea>的子节点为需要运算得出结果的单个字段,将运算结果存入中间变量列表中,仅用于中间数据运算,不计入组包结果;
(2.4)若数据包节点<Package>的子节点的节点名为标识区域<FlagArea>,则进入标识区域处理流程:依次对标识区域<FlagArea>的所有子节点进行处理,并将得到的子节点数据写入一个临时列表中,当该标识区域<FlagArea>的所有子节点处理完毕后,将临时列表中的子节点数据按照指定的数据拼接方式依次拼接,得到一个组包字符串,存入组包结果;
(2.5)若数据包节点<Package>的子节点的节点名为保护区域<ProArea>,则进入保护区域处理流程:依次对保护区域<ProArea>的所有子节点进行处理,并将得到的子节点数据写入一个临时列表中,当该保护区域<ProArea>的所有子节点处理完毕后,将临时列表中的子节点数据按照指定的数据拼接方式依次拼接,得到一个组包字符串,在依次处理完所有子节点得到组包字符串之后,根据协议模板的保护区域运算定义,对该组包字符串进行运算,将运算结果作为最后的组包结果;
(2.6)若数据包节点<Package>的子节点的节点名为循环区域<CycArea>,则进入循环区域处理流程:该循环区域处理流程包括一个嵌套循环,先根据协议模板定义的循环次数确定外层循环次数,再根据循环区域中子节点的个数确定内层循环次数,在内层循环中依次运算子节点的结果,每个子节点的结果会根据协议模板定义运算出固定结果;当两层循环处理完毕,将所有子节点的固定结果拼接得到循环区域的组包结果。
4.根据权利要求3所述的基于XML的协议动态组包和解析方法,其特征在于,当数据包节点<Package>的节点名为标识区域<FlagArea>时,若该标识区域<FlagArea>在后续其他地方参与运算,则通过协议模板定义的引用属性将标识区域<FlagArea>的组包结果写入中间变量列表,后续可以引用该中间变量列表中存储的标识区域<FlagArea>的组包结果,从而将该标识区域<FlagArea>的连续多个数据作为一个整体进行引用。
5.根据权利要求3所述的基于XML的协议动态组包和解析方法,其特征在于,当数据包节点<Package>的节点名为循环区域<CycArea>时,根据协议模板定义,加上内外循环次数作为子节点的结果的文件名后缀,以确保数据的唯一性;再根据协议模板定义,动态读取文件名连续的外部文件数据作为组包结果。
6.根据权利要求1所述的基于XML的协议动态组包和解析方法,其特征在于,通过解析协议模板的XML文件中的关键字来模拟协议动态解析的方法包括如下步骤:
(1)根据传入的协议模板名称及数据包名称,从内存中已加载的协议模板数据中通过匹配<Package>标签找到与传入的数据包名称相同的节点;
(2)依次循环遍历数据包节点<Package>的子节点,对协议模板进行预处理;
(3)协议预处理完成后,再次依次循环解析数据包节点<Package>的子节点,根据不同关键字进行不同的操作步骤,输出子节点的解析结果,并将解析结果记入解析结果列表中;
(4)数据包节点<Package>下的所有子节点处理完成后,将解析结果列表中的解析结果按照顺序依次输出到结果文件中,以备用户查看。
7.根据权利要求6所述的基于XML的协议动态组包和解析方法,其特征在于,对协议模板进行预处理的方法包括如下步骤:
(2.1)若数据包节点<Package>的子节点的节点名为被引用区域<RefArea>,则进入被引用区域处理流程:该被引用区域处理流程将被引用区域整个写入被引用数据中间变量列表中,供调用区域<CallArea>直接引用;
(2.2)若数据包节点<Package>的子节点的节点名为调用区域<CallArea>,则进入调用区域处理流程:该调用区域处理流程将根据该调用区域<CallArea>的节点值获取被引用区域的名称,从调用区域<CallArea>的id属性获取其子节点id的前缀信息,然后将被引用区域的所有子节点的id加上前缀信息进行更新后替换协议模板的调用区域内容。
8.根据权利要求1所述的基于XML的协议动态组包和解析方法,其特征在于,协议动态解析的方法中,依次循环解析数据包节点<Package>的子节点,根据不同关键字进行不同的操作步骤,输出子节点的解析结果的方法包括如下子步骤:
(3.1)若数据包节点<Package>的子节点的节点名为字段<Field>,则进入字段处理流程:根据字段长度及运算出的字段偏移获取字段实际值,或者根据字段分隔符获取字段实际值;若定义了字段预期值,则根据预期值的字段运算方式获取字段预期值;然后将字段实际值与字段预期值进行比对,若一致则流程继续进行,不一致则输出错误信息并终止解析流程;
(3.2)若数据包节点<Package>的子节点的节点名为准备区域<PreArea>,则进入准备区域处理流程:依次将准备区域<PreArea>的所有子节点定义的数据读取到中间变量列表中,以备后续使用;
(3.3)若数据包节点<Package>的子节点的节点名为私有区域<PriArea>,则进入私有区域处理流程:依次对该私有区域<PriArea>的所有子节点进行处理,该私有区域<PriArea>的子节点为需要运算得出结果的单个字段,将运算结果存入中间变量列表中,仅用于中间数据运算,不计入组包结果;
(3.4)若数据包节点<Package>的子节点的节点名为标识区域<FlagArea>,则进入标识区域处理流程:先根据协议模板定义获取该标识区域<FlagArea>的数据,再依次对标识区域<FlagArea>的所有子节点进行处理,并将得到的子节点数据写入一个临时列表中,当该标识区域<FlagArea>的所有子节点处理完毕后,将临时列表中的子节点数据按照顺序输出一个解析字符串到结果文件的XML文件中,便于用户查看;
(3.5)若数据包节点<Package>的子节点的节点名为保护区域<ProArea>,则进入保护区域处理流程:首先,根据保护区域的数据长度获取该保护区域解析前的数据,然后根据保护区域的运算信息子节点<CalcInfo>中定义的运算信息,将保护区域解析前的数据作为运算函数的输入参数,运算后得到解除保护后的数据;然后将解除保护后的数据按照保护区域的具体字段定义依次解析,得到该保护区域数据的最终解析结果;
(3.6)若数据包节点<Package>的子节点的节点名为循环区域<CycArea>,则进入循环区域处理流程:先根据协议模板定义的循环次数,实时动态生成本循环的协议模板,然后再获取循环区域<CycArea>的数据,并按照实时动态生成的本循环的协议模板,依次解析循环区域<CycArea>的各子节点,并输出解析结果;
(3.7)若数据包节点<Package>的子节点的节点名为子模板区域<SubArea>,则进入子模板区域处理流程:该子模板区域处理流程将根据协议模板定义的子模板名称,实时从内存中已加载的协议模板文件中匹配对应的子模板,然后将匹配到的子模板加入子模板临时列表中,以备后续直接引用;
(3.8)若数据包节点<Package>的子节点的节点名为选择区域<SelArea>,则进入选择区域处理流程:通过在协议模板中定义选择条件,及该选择条件下需要跳转的子模板名称,实现协议处理流程的分支判断及处理,满足选择条件则直接从子模板临时列表中匹配对应的子模板进行解析。
9.根据权利要求8所述的基于XML的协议动态组包和解析方法,其特征在于,整个标识区域<FlagArea>的数据,以及该标识区域<FlagArea>中的子节点获取方式一共有两种:
一种是根据该标识区域<FlagArea>的数据长度,以及运算出来的该标识区域<FlagArea>的数据偏移来获取数据,这种类型适用于数据是数值直接拼接的情况;
另一种是根据协议模板定义的分隔符来获取数据,这种类型适用于数据的拼接方式是带有格式的情况。
10.根据权利要求8所述的基于XML的协议动态组包和解析方法,其特征在于,选择条件有两种定义方式:
一种是前面已解析完毕的子节点,则选择条件指定为节点名称;
另一种是还未解析出的子节点,则根据该子节点的数据长度及相对偏移来获取数据。
CN202111218220.8A 2021-10-20 2021-10-20 一种基于xml的协议动态组包和解析方法 Active CN113887173B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111218220.8A CN113887173B (zh) 2021-10-20 2021-10-20 一种基于xml的协议动态组包和解析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111218220.8A CN113887173B (zh) 2021-10-20 2021-10-20 一种基于xml的协议动态组包和解析方法

Publications (2)

Publication Number Publication Date
CN113887173A true CN113887173A (zh) 2022-01-04
CN113887173B CN113887173B (zh) 2024-06-18

Family

ID=79003660

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111218220.8A Active CN113887173B (zh) 2021-10-20 2021-10-20 一种基于xml的协议动态组包和解析方法

Country Status (1)

Country Link
CN (1) CN113887173B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114090523A (zh) * 2022-01-19 2022-02-25 荣耀终端有限公司 电子设备及其xml文件的节点解析方法、介质
CN114785864A (zh) * 2022-06-16 2022-07-22 联宝(合肥)电子科技有限公司 一种数据交互方法、系统、电子设备及存储介质
CN115242691A (zh) * 2022-07-04 2022-10-25 中国电子科技集团公司第三十研究所 一种基于协议特征库的协议识别方法
CN115801922A (zh) * 2022-11-11 2023-03-14 安徽智网信息科技有限公司 一种基于串口通信字节码协议的解析规则生成方法
CN116800868A (zh) * 2023-08-29 2023-09-22 南京天创电子技术有限公司 基于xml的可视化通信协议解析方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101944025A (zh) * 2010-09-16 2011-01-12 福建鑫诺通讯技术有限公司 基于python语言的tcp/udp数据的自动组包与解包的方法
WO2012171166A1 (zh) * 2011-06-13 2012-12-20 华为技术有限公司 协议解析方法及装置
CN109194617A (zh) * 2018-08-01 2019-01-11 杭州电子科技大学 Xml报文的自动解析、封装方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101944025A (zh) * 2010-09-16 2011-01-12 福建鑫诺通讯技术有限公司 基于python语言的tcp/udp数据的自动组包与解包的方法
WO2012171166A1 (zh) * 2011-06-13 2012-12-20 华为技术有限公司 协议解析方法及装置
CN109194617A (zh) * 2018-08-01 2019-01-11 杭州电子科技大学 Xml报文的自动解析、封装方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
何舒: "基于XML的协议动态测试工具设计", 软件, vol. 42, no. 2, 15 February 2021 (2021-02-15), pages 108 - 111 *
葛泽文 等: "基于自定义通信协议的动态测试技术研究", 数字技术与应用, vol. 37, no. 09, 25 September 2019 (2019-09-25), pages 90 - 92 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114090523A (zh) * 2022-01-19 2022-02-25 荣耀终端有限公司 电子设备及其xml文件的节点解析方法、介质
CN114090523B (zh) * 2022-01-19 2022-06-07 荣耀终端有限公司 电子设备及其xml文件的节点解析方法、介质
CN114785864A (zh) * 2022-06-16 2022-07-22 联宝(合肥)电子科技有限公司 一种数据交互方法、系统、电子设备及存储介质
CN114785864B (zh) * 2022-06-16 2022-09-02 联宝(合肥)电子科技有限公司 一种数据交互方法、系统、电子设备及存储介质
CN115242691A (zh) * 2022-07-04 2022-10-25 中国电子科技集团公司第三十研究所 一种基于协议特征库的协议识别方法
CN115242691B (zh) * 2022-07-04 2023-05-19 中国电子科技集团公司第三十研究所 一种基于协议特征库的协议识别方法
CN115801922A (zh) * 2022-11-11 2023-03-14 安徽智网信息科技有限公司 一种基于串口通信字节码协议的解析规则生成方法
CN116800868A (zh) * 2023-08-29 2023-09-22 南京天创电子技术有限公司 基于xml的可视化通信协议解析方法及系统
CN116800868B (zh) * 2023-08-29 2023-11-07 南京天创电子技术有限公司 基于xml的可视化通信协议解析方法及系统

Also Published As

Publication number Publication date
CN113887173B (zh) 2024-06-18

Similar Documents

Publication Publication Date Title
CN113887173A (zh) 一种基于xml的协议动态组包和解析方法
CN104156313B (zh) 一种Web服务测试用例自动生成方法
US9747190B2 (en) Analysis system, analysis method, and computer program product
US9424003B1 (en) Schema-less system output object parser and code generator
US6321376B1 (en) Apparatus and method for semi-automated generation and application of language conformity tests
CN106970820A (zh) 代码存储方法及代码存储装置
CN109800258A (zh) 数据文件部署方法、装置、计算机设备及存储介质
CN107220096A (zh) 一种json数据解析方法及装置
CN110275831A (zh) 协议接口的mock数据校验方法和装置
CN111190594A (zh) Vue组件的文档生成方法及装置
CN109670081A (zh) 业务请求处理的方法及装置
CN112187713B (zh) 报文转换的方法、装置、计算机设备和存储介质
CN107797805B (zh) 一种代码封装方法、装置及计算机可读存储介质
CN113949749B (zh) Xml报文处理方法及装置
CN104750468B (zh) 一种服务端拓扑数据转换方法和转换装置
CN113849781A (zh) Go语言源代码混淆方法、系统、终端及存储介质
CN113608748A (zh) C语言转换Java语言的数据处理方法、装置及设备
CN111708542A (zh) 测试用例生成方法、系统、设备及存储介质
CN114816364A (zh) 基于Swagger动态生成范本文件的方法、装置及应用
EP2535813A1 (en) Method and device for generating an alert during an analysis of performance of a computer application
CN112764808A (zh) 一种跨系统、跨语言、跨硬件部件进行接口通讯的方法
CN103678054B (zh) 用于BACnet设备的测试方法及装置
Vizovitin et al. Verifying UCM specifications of distributed systems using colored Petri nets
Arusoaie et al. Automating abstract syntax tree construction for context free grammars
KR20090056622A (ko) 바이너리 데이터 파일 분석 방법 및 장치와 그 방법을수행하기 위한 프로그램이 기록된 기록매체

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
GR01 Patent grant