admin 管理员组

文章数量: 1184232


2024年4月20日发(作者:modernizr的形容词形式)

电子测量技术 第4O卷第3期 

ELECTR0NIC MEASUREMENT TECHN0L0GY 

2017年3月 

基于XML的多协议报文解析的方法与实现* 

吴建斌邹佩江 

(华中师范大学物理科学与技术学院 武汉430079) 

摘 要:在现代工业控制领域中,尽管报文协议种类繁多,传统的报文解析技术仍存在着实时性低,对多协议报文解 

析效率低等缺点。针对上述问题,考虑到使用XML文档作为报文解析协议的优点,本文提出了一种基于XML的多 

协议报文解析方法,该方法利用XML文档作为报文格式描述文件,根据不同的报文格式编辑相对应的解析文档,采 

用报文解析器和解析协议文档相分离的形式对数据报文进行解析。实验结果表明,此方法很好的提高了报文的解析 

效率,同时实现了对多种不同格式报文的实时解析。 

关键词:报文解析;多协议;XML;WinPcap 

中图分类号:TN919.5 文献标识码:A 国家标准学科分类代码:510.1050 

Multi—protocol message parsing method and implementation based on XML 

Wu Jianbin Zou Peijiang 

(School of Physical Science and Technology,Central China Normal University,Wuhan 430079,China) 

Abstract:Although there are numerous message protocols in the field of modern industrial control,the real—time 

performance and the message parsing efficiency of traditional message parsing techniques are still poor.To solve the 

above problems,the advantages of using XML files as message protocols were taken into consideration.A multi— 

protocol message parsing method based on XML is presented in this study.This method uses the description of the 

document as a message format file.In this way,the message parser and resolution protocol document are respectively 

parsed according to their formats.Our results show that this method can significantly improve the efficiency of message 

parsing,and realize the real-time analysis of a variety of different format messages. 

Keywords:message parsing;multi-protocol;XML;WinPcap 

1 引 言 

加,解析速率较慢。王鑫等人_4]提出的使用FPGA等硬件 

能够实现报文实时快速的解析,但不具备良好的灵活性和 

现代工业控制系统通常借助以太网协议将多个设备构 

可扩展性。上述各种报文解析方法虽然能实现报文的解 

成一个系统网络,设备间通过报文进行通信和互联。为了 

析,但都存在不足,为提高报文解析的速率,同时能实现多 

解各个设备的实时工作状态,需对设备间的报文进行解析, 

种不同格式的报文解析,本文在充分了解工业控制系统的 

由于工业控制系统网络有各自的特点,报文具备多种不同 

实际应用特点的基础上,考虑到基于XML报文解析方法 

格式,因此需要研究不同格式的报文解析方法对报文进行 

的优点,提出了一种基于XML的多格式报文解析方法 , 

解析。王娇等人 设计了一种硬编码模块解析固定格式的 

实现了多协议报文的实时快速解析,在实际的系统中得到 

报文,该方法能解析出特定格式的报文,但不能应对多种不 

了广泛的应用。 

同格式的报文。罗毅等人[2 考虑到提出将自描述的结构信 

息与数据信息分离,定义一种自解析报文协议HML。该 

2 总体框架 

方法虽然能解析多种不同格式的报文,但该协议的描述和 

某工业控制系统的总体框架如图1所示。该控制系统 

使用过于复杂,不便于推广。董永吉等人口 结合流水线和 

主要由系统设备、交换机和解析计算机组成。 

二叉树查表思想定义了一种报文解析方法,该方法虽然能 

系统设备:系统设备之间的连接方式采用双冗余、全双 

实现多种格式的报文解析,但当协议较多时,资源消耗增 工的星型网络拓扑结构 。网络中的每个设备通过两块网 

收稿日期:2016-07 

*基金项目:华中师范大学中央高校基本科研业务研究基金(CCNU15A0204)资助项目 

・ 168 ・ 

吴建斌等:基于XML的多协议报文解析的方法与实现 第3期 

图1系统总体框架 

卡与两台独立的交换机相连。从而在设备与设备之间构建 

两个并行的独立子网。发送方向接收方发出通信数据帧, 

同一数据帧在两个子网中并行传输。其中一个子网发生故 

障,另一个子网仍会正常工作。 

交换机:交换机将多个设备连接在一个子网中,各个设 

备之间通过报文进行通信。为实时解析报文,了解设备间 

的工作状态,交换机上单独设置了一个镜像端口,解析计算 

机通过与镜像端口可以捕获子网中所有的设备通信报文。 

解析计算机:报文解析软件安装在解析计算机上,解析 

计算机通过两块网卡与两台独立的交换机相连,通过对两 

个子网中的通信数据报文同时进行捕获 ],从而能够对某 

工业系统网络中所有设备间的通信进行侦听。并且能够对 

多协议报文进行实时快速的解析。 

3报文的描述方法 

为了保证通信的安全可靠,通常使用TCP作为报文的 

传输协议。但是,考虑到UDP报文在数据传输过程中延迟 

小、数据传输效率高等优点,在该控制系统中,采用了UDP 

协议作为报文的传输协议[8],考虑到可靠性对UDP协议进 

行了改造,在设备间设置了重传机制,即如果发送方在合理 

的往返时间内未收到接收方的反馈,发送方将对信息进行 

重发。 

图2所示为UDP报文结构。UDP报文由UDP报头 

和UDP数据两部分所组成。其中UDP报头由报文长度、 

报文端口号等信息组成,而报文数据项则用来承载真正需 

要用来传输的有用信息,数据中包含有设备的状态信息。 

图2 UDP报文结构 

由于从分路器捕获并传递给解析计算机的报文有多种 

格式,为了能够满足报文格式的需求以及让解析器自动识 

别并进行正确解析。 。本文对在系统中传递的UDP报文 

数据项部分,进行了格式设计,如图3所示。 

UDP数据项部分又被分为了“报文标识字段”和多个 

/ luDP报文头 uDp数据 \ 

Item 1 Item 2 … tl em 一 识位l, L1I m__2 …IItem n 

图3系统报文结构 

数据子项。 

UDP报文的数据项中前两位设为“报文标识字段”,程 

序通过读取“报文标识字段”便可识别出报文所属的功能和 

类型及来源,然后再根据相应的报文格式描述文件进行处 

理,解析出所需要的信息。 

数据子项部分,又对它的数据特性部分做了规范化的 

定义。这些信息是定义报文结构的关键信息,如表1所示。 

表1 报文数据子项的组成 

数据特性 含义 

Name 

数据名称 

Length 

数据长度 

Type 

数据类型 

D/mension 

数据量纲 

在处理数据项时,在图4中通过一个网格化的形式来 

对其进行描述。纵轴表示报文中每一项数据的特性,横轴 

表示报文中的每一个数据项。对于横轴中的每一项数据的 

特性,都可以对其进行修改。对于纵轴上的数据项,又可以 

对其进行添加、删除、插入等操作。 

数据特性 

数 

据 

项 

图4报文信息描述 

从报文信息描述表可以看出,对于数据项的特性采用 

了统一的格式化的描述方式,对于一系列数据项又可以对 

其进行动态的增加或者删除操作。 

为了能够更好的是对报文格式进行描述,及方便的对 

报文描述信息进行修改。考虑到XML是种可扩展式语 

言,使用普通文本进行保存,具有简单易用、互操作性强、修 

改方便、跨平台性良好等优点,XML可以很好的对结构化 

的数据进行描述。考虑到XML作为数据交换的唯一公共 

语言,已经被广泛使用在各个领域中,因此选择使用XML 

作为报文格式的描述文件。 

・ 

169 ・ 

第4O卷 电 子 测 量技术 

4报文解析器设计 

针对传统报文解析器可扩展性差、解析效率低等特点。 

本文在进行报文解析时,设计了使用XML文档作为解析 

开始 

_二) 

i 

PcapflndaUdevs() 

协议对多格式报文进行解析的报文解析器[1 。该报文解 

析软件在Windows平台下采用C++语言开发,用户界面 

在Visual Studio 2008下实现,使用XML文档作为报文格 

获取网络设备列表 

式描述文件,使用者根据自身需求对报文解析协议进行任 

意的修改和扩展,能够实现对于多协议网络数据的实时捕 

i 

Pcap open() 

打开网络设备,获取¨立备列表 

获及解析。 

报文解析软件的解析框架如图5所示。软件分为数据 

捕获模块和报文解析两个主要模块。当启动解析软件时, 

数据捕获模块开始从某工业以太网中抓取数据帧,需要解 

析的报文被点击,报文解析模块自动匹配XML协议文档 

完成报文的解析,并显示解析结果L1 。 

图5报文解析软件结构 

4.1报文捕获 

当数据帧从分布式网络分路器传递到解析计算机时, 

启动报文捕获程序,程序便会调用调用WinPcap库函数对 

数据进行采集 。以下是基于WinPcap的网络数据包捕 

获流程及所使用到的库函数,如图6所示。 

1)获取网卡列表 

利用WinPcap库函数中的Pcap—findalldev—ex()函数 

来获得网络适配器列表,当调用这两个函数时,都会返回一 

个结构列表,列表的每项内容都包含全部的网卡信息:地址 

列表、掩码列表、广播地址和一个目的地址。 

2)打开网卡 

获得网卡信息之后,下一步就是调用Pcap—open()函 

数打开网卡并准备捕获数据包。函数有3个参数snaplen、 

promisc、to

ms。snaplen用于指定要捕获数据包的长度。 

promisc参数指定网卡的工作模式。tO—ms参数指定读读 

数据的超时控制。 

3)设置过滤规则 

为了高效的捕获网络中全部或者某些特定的数据包, 

有必要对数据包进行过滤。通过WinPcap.dll中提供的 

・ 

]7O ・ 

i 

Pcap compile() 

Pcap setiflter() 

没置并编译过滤规则 

l 

Pcap

loop() 

循环捕获网络数据包 

i 

厂P

c印-cl0se() 1、、 

\、 结束数据包捕获 

图6报文捕获流程 

Pcap

compile()和Pcap

setifleter()两个函数便可以实现 

对数据包的过滤。Pcap—compile()是用来对过滤规则进行 

设置。Pcap—setfileter()用来打开过滤规则,这时所有的网 

络数据包都将流过过滤器。 

4)数据包捕获 

旦网卡被打开,就可以调用Peap—loop()对数据包进 

行捕获。Pcap—loop()对数据包进行循环捕获,捕获完毕之 

后会返回一个Pcap—pkthdr结构的指针。 

5)数据包捕获结束 

得到捕获数据后,将抓取到的数据保存为PCAP格式 

文件,最后关闭相关文件并结束捕获_ 】。 

4.2报文解析 

根据第2节中报文的描述方式,可以事先编辑好对报 

文结构进行描述的XML协议文档,并将其保存在解析计 

算机上。 

图7所示为对时间信息报文结构进行描述的XML示 

例文档。这段XML文档对报文的每一个数据子项都进行 

了详尽的描述。报文解析器的解析过程将以图7中所给出 

的XML解析文档为模板,对系统网络中的时间报文的解 

析过程进行描述。报文解析的具体流程和步骤如图8 

所示。 

1)启动报文解析器,从保存的数据包中读取待解析的 

报文。 

2)解析器加载报文并读取报文数据,然后将报文结构 

吴建斌等:基于XM[ 的多协议报文解析的方法与实现 第3期 

<7舯I version=“1Io > 

一《Data> 

<item dimension=。无‘type= 3”length= 1。name=。秒‘I,> 

<item dimension=‘无‘type=。3”length= 1。name=。分 l,> 

<item dime.sion=。无。type=‘3”length= 1。name=。时‘I,) 

<item dimension=。无。type==8 length= 1。name=’时区嚣正 > 

<item dime ̄nsion=‘无‘type=。3“length= 1。name=。日’l,> 

<item dimension=。无。type=’3。length=”1。name=。月’l,> 

<item dimension=。无‘type=。3”length= 1‘name=。年的蕾字节。,> 

<item dimen ̄on=。无。脚pe=’3”length= 1‘name=。年9墙字节。,> 

<item explain=“ 试 ,) 

</Data> 

图7实际报文定义示例 

图8报文解析流程 

体指针移到UDP报文头结尾,再向右移动两位取出报文标 

识位。根据报文标识位的数据自动匹配并加载对应的 

XML解析文档。如果在解析计算机中没有找到与报文标 

识位相对应的XML解析文档,解析器便会抛出异常,结束 

解析过程,并向用户发出错误提示“没有找到解析文件”。 

3)当匹配到对应的解析文档,解析器会自动计算图5 

中解析文档中所有Lengths位总长度。再与报文数据项总 

长度进行对比,如果长度不同,解析过程会抛出异常,结束 

解析,并向用户发出错误提示。 

4)当报文数据项长度与XML解析文档Lengths位总 

长度相等时。解析器加载XML文档,并根据XML文档中 

各数据项的“name”位信息,生成相适应的报文结构的结 

构体。 

5)报文解析器根据XML解析文档对报文数据项进行 

逐条处理。报文解析器根据XML解析文档数据子项中 

“Length”位的值,决定解析器从报文“标识位”末尾开始,向 

右取出几位数据。取出数据后,根据数据项的“type”位和 

“dimension”位的值,经过一系列的运算解码将数据解码并 

显示。这就完成了一个数据项的处理。循环处理报文中的 

数据项,最后将解析出的结果填充到报文结构体中。 

6)最后完成报文的解析工作,并显示结果。 

5实验验证系统 

硬件部分包括:1个运行在PC上的主控制器,工作在 

系统网络中的5个子设备,2个交换机和1个协议解析计 

算机。设备间使用以太网连接。交换机采用TP—LINK的 

型号为TL—SF1024D的24口百兆交换机。 

软件部分包括:解析计算机上面的协议解析器以及协 

议编辑器。 

实验数据包括:1)对报文格式进行描述的XML协议 

文档;2)测试报文,该报文由某工业系统网络中的工业设备 

产生,每个设备都会给解析计算机发送当前的工作状态。 

实验过程如下:1)启动解析器,加载以XML文件格式 

保存的报文协议;2)启动抓包程序,耗时60 s,捕获100 000 

个数据报文;3)捕捉100 000个数据报文之后即刻停止,解 

析器处理捕捉的数据报文。性能测试指标如表2所示。 

表2性能测试指标 

性能 指标 

中断响应时间 

7O£上s 

理论吞吐量 

16 000 P/S 

实际吞吐量 

14 000 P/S 

包捕获率 

1O0% 

实验中软件采集的报文数据,是根据事先定义好的 

XML协议文档进行解析的,实现了解析文档与解析程序相 

分离,该软件具有良好的扩展性。 

对于单个数据包的处理在70 s内便可以完成,远小 

于1 ms,能够完成对某工业系统网络数据的实时处理。通 

过大量数据的长时间测试,能够正面此软件工作稳定。 

图9所示为对某工业系统网络中,2个设备的工作状 

态报文解析显示结果,可以看出解析器按照第2节中的解 

析规则,将数据帧清晰、完整地解析并显示。 

6 结 论 

本文提出了一种基于XML的多格式报文解析方法。 

实现了用XML格式文件来保存报文格式描述信息,使报 

文解析器和报文格式描述文档以相分离的形式对数据报文 

进行解析。实验结果验证了,此系统能够方便地实现解析 

对象的扩展和重构,提高了解析器的通用性,使用户能实时 

便捷的对协议报文进行解析。但是在加载待解析报文和数 

据传输的处理上耗时较长,未来还将针对以上这些问题进 

行改善,提高软件的运行效率。 

・ 

】7] ・ 

第4O卷 电 子 测 量技术 

阡仟FF FF件犴o0 2a^l D5 D啐E2德∞45∞ 

∞38 35 oc O0∞40 II a 3A cD^8 Ol 1F cD^8 

Ol FF 42 44 42¨oo 24 FB;印lC∞oo∞IF 01 

^8 c0 FF Ol^8∞O0 O0 FF 01 OC o。o3。2 26 o6 

11 OO 15 l2 15 2B 

图9报文的解析结果 

参考文献 

[1] 王娇,张惠刚,李广华,等.IEC 61850新型网络冗余 

报文捕获解析工具开发[J].电力建设,2014, 

35(i0):84—88. 

[2] 罗毅,吴产乐,熊伟成.一种基于自解析报文协议的 

系统分层方法[J].计算机工程,2012,38(4):79—81. 

[3] 董永吉,郭云飞,黄万伟,等.一种新的高速报文解析 

结构研究[J].电子与信息学报,2013,35(5): 

1083—1089. 

-I4] 王鑫,许力,李晓,等.基于FPGA的GOOSE报文解 

析模块设计与实现[J].电力系统保护与控制,2015, 

43(24):101—107. 

I-5] 孟祥雪.基于XML的模块化分布式软件系统架构设 

计[J].国外电子测量技术,2014,33(7):9-12. 

[6] 高军军,余跃,郑庆伟,等.面向武器系统高速高可靠 

应用的双冗余网络设计[c].第三届中国指挥控制大 

会,2015:5. 

[7] 李彦,李锵.基于嵌入式Linux系统的双网卡大数据 

传输[J].电子测量与仪器学报,2014,28(9): 

1027—1O32. 

[8] 李红,祝连庆,闾光,等.基于改性型UDP和CIGI的 

光纤光栅高速解调技术研究[J].仪器仪表学报, 

2016,37(1):l29—135. 

[9] 陈欢,谢健.多格式气象报文数据实时解析研究与应 

用[J].计算机应用,2012,32(A1):109—11o. 

[1O] 刘酷,郇极,刘艳强.基于XMI 的EtherCAT工业以 

太网协议解析技术[J].北京航空航天大学学报, 

2011,37(9):1086—1090. 

[11]李海刚,高欣.基于元数据驱动的通用电文解析技 

术EJ].控制工程,2013,20(S1):142—145. 

[12]张玉琴,王亮,李盘文.高性能网络数据捕获方案的 

分析和优化[J].电子测量技术,2O15,38(6): 

135—138. 

[13]沈辉,张龙.基于WinPcap的网络数据监测及分析 

[J].计算机科学,2012(s2):15—18,29. 

作者简介 

吴建斌,1972年出生,工学博士、副教授、硕士生导师, 

主要研究方向为信息隐藏、探地雷达信号处理等。 

E—mail:wuj ianbin@mail.ccnu.edu.cn 

邹佩江,1988年出生,工学硕士,主要研究方向为数据 

挖掘。 

E-mail:zpjpatrick@126.corn 


本文标签: 报文 解析 数据 进行 协议