报文生成方法

文档序号:7614787阅读:250来源:国知局
专利名称:报文生成方法
技术领域
本发明涉及数据通信技术领域,更具体的说,本发明涉及一种报文生成方法。
背景技术
随着互联网在全世界的普及,数据通信设备的功能、稳定性和健壮性越来越重要,而要达到这些标准,对数据通信设备进行严格的测试是必不可少的。通常,数据通信设备之间的通信是通过各种协议报文的交互实现的,数据通信设备的主要功能就是要正确地处理各种协议报文,对数据通信设备的测试一般也是通过向被测设备发送各种协议报文进行测试来实现的。例如,数据通信的协议一致性测试、异常测试、攻击测试等,因此,如何构成并生成各种协议报文已成为数据通信领域测试技术的一个关键。
现有技术中数据通信领域生成协议报文一般采用两种方式,第一种方式是利用现有测试工具的协议报文构造功能,具体生成报文主要包括下面的步骤首先,捕获网上传输的协议报文;然后,对捕获的报文的某些字节进行修改以构成所需的协议报文;若修改某些字节而引起其它报文域的变化(如校验和),则重新计算需要变化的报文域的值;将所述修改后的协议报文输出作为生成的协议报文。
该种方式实现较简单,但存在如下的缺点首先,协议报文的构造往往取决于网上传输的报文,不可预知;
其次,对捕获报文的字节流里的字节进行修改比较困难。由于要在一长串字节流里找到要修改的字节;并且,有时修改某个字节会引起其它报文域的变化,如校验和域,这样就要重新计算要发生变化的报文域,比较费时费力;再次,一些新出现的数据通信协议,往往在网上捕获不到这些协议的报文,这样就无法构造这些协议的报文了,另外,也不容易构造一些特殊报文,因为特殊报文很难在网上捕获。
第二种方式主要是利用TCL语言技术,用TCL扩展命令来封装生成协议报文,某种协议的一种报文往往对应一个TCL扩展命令。对于某种具体的协议报文,该方法要求输入该协议报文的具体参数。如构造一个ARP报文,则需要类似如下方式的描述MakeArpPacket-seth mac-sip ip_addr-deth mac-dip ip_addr-oper oper注-seth mac表示源MAC地址;-sip ip_addr表示源IPv4地址;-deth mac表示目的MAC地址;-dip ip_addr表示目的IPv4地址;-oper oper表示表示操作类型,1表示ARP请求,2表示ARP应答。
该种方法存在如下缺点首先,一种协议中的一种报文往往需要对应一个TCL扩展命令,如要构造多个协议的多种报文时,则需要开发的TCL扩展命令数目巨大;其次,开发相应的TCL扩展命令比较复杂,需要用C语言编写代码,这对测试人员要求比较高;再次,对于新出现的数据通信协议,没有现成的TCL扩展命令来构造这些协议的报文,只能继续投入人力来开发构造这些协议报文的TCL扩展命令。
再次,也不容易构造一些特殊报文,因为特殊报文往往具有不确定性,很难预先用TCL命令实现。

发明内容
本发明解决的技术问题是提供一种通用的报文生成方法,以实现构造任意的数据通信协议报文。
为解决上述问题,本发明的报文生成方法,用于生成各种数据通信协议报文,该方法包括如下步骤a、将各个数据通信协议具体报文格式的各种报文域抽象分类划分为比特报文域、字节报文域、字符串报文域、长度报文域以及检验和报文域;b、将待生成的数据通信协议具体报文格式的各个报文域归类到所述的比特报文域、字节报文域、字符串报文域、长度报文域以及检验和报文域;c、根据待生成的数据通信协议具体报文格式的各个报文域在其归属的所述比特报文域、字节报文域、字符串报文域、长度报文域或检验和报文域的输入参数值,整理输出该数据通信协议报文的完整字节流。
其中,步骤b包括b1、按照数据通信协议报文具体格式中的报文域顺序依次对归类的报文域进行编号;b2、确定归类到所述的比特报文域、字节报文域、字符串报文域中的各个报文域在待生成数据通信协议具体报文格式里所占长度及值,以及所述的长度报文域所占长度、所代表的长度单位、所代表长度范围的起始报文域序号和结束报文域序号,所述的检验和报文域所占长度、所检验范围的起始报文域序号和结束报文域序号以及所采用的检验和算法;b3、按照报文域的编号顺序,依次输入该报文的所有报文域参数值,若是长度报文域或检验和报文域,则输入报文域的值置为0;步骤c包括
c1、根据输入报文域的参数值,依次生成各个报文域的比特流,并把该比特流附加到该报文已生成比特流的尾部;c2、把该报文的完整比特流转换为字节流;c3、根据所述长度报文域所代表长度范围的起始报文域序号和结束报文域序号确定所述长度报文域的值,然后把得到的值填入该长度报文域在上述报文字节流的相应位置;c4、按照从最后一个检验和报文域到最前一个检验和报文域的顺序,依次根据所述检验和报文域所检验范围的起始报文域序号和结束报文域序号,以及所采用的检验和算法确定所述检验和报文域的值,然后把得到的值填入该检验和报文域在上述报文字节流的相应位置;c5、输出该报文的完整字节流。
与现有技术相比,本发明具有以下有益效果本发明通过将各个数据通信协议具体报文格式的各种报文域抽象分类划分为比特报文域、字节报文域、字符串报文域、长度报文域以及检验和报文域;然后将待生成的数据通信协议具体报文格式的各个报文域归类到所述的比特报文域、字节报文域、字符串报文域、长度报文域以及检验和报文域;根据待生成的数据通信协议具体报文格式的各个报文域在其归属的所述比特报文域、字节报文域、字符串报文域、长度报文域或检验和报文域的参数值,整理输出该数据通信协议报文的完整字节流。基于上述的报文生成方法可实现任意数据通信协议报文,数据通信测试人员不需要再花费大量的时间去开发其它的报文构造工具或相应的TCL扩展命令,可大大节省人力物力,加快对数据通信现有协议和新增协议的测试进度。


图1是是RFC791中关于IPv4首部格式的描述;图2是本发明报文生成方法的具体实现示意图。
具体实施例方式
数据通信的一个协议通常与一篇或多篇RFC文档相对应,在所述的RFC文档里有该协议所有报文的格式描述。报文格式描述是以报文域为单位的,报文域的内容可以是多个字节、多个比特、甚至是一个比特,数据通信报文最终在网络线路上传输的是0或1的比特流。例如,参考图1,该图是RFC791中关于IPv4首部格式的描述,图中的一个单词或词组表示一个报文域。该数据通信协议的报文由11个报文域组成。
本发明根据数据通信协议报文是由多个报文域构成的事实,对各种报文域进行抽象分类和定义。对于与协议一致的报文,测试人员可以按照相应RFC文档里的报文格式,把一个报文分成多个报文域,给出每个报文域的输入参数,将其归属到其分类的抽象报文域中,根据各个报文域的输入参数便可以输出所要的报文;同样地,对于异常报文,测试人员只要给出组成该报文的所有报文域的输入参数,将其归属到其分类的抽象报文域中,根据各个报文域的输入参数便可以输出所要的异常报文。
本发明对数据通信协议报文的报文域进行了抽象分类,定义了如下五种报文域类型,数据通信协议报文的报文域可以被这五种报文域类型所涵盖●比特报文域该种报文域里包含一个或多个比特,归属该种类型的报文域输入的参数有■比特数目;■该报文域的值;●字节报文域该种报文域里包含一个或多个字节,归属该种类型的报文域输入的参数有■字节数目;■该报文域的值;●字符串报文域该种报文域的内容是一个字符串,归属该种类型的报文域输入的参数有■一个字符串,如“hello world”;●长度报文域该种报文域的填充内容是该报文某段内容的长度,归属该种类型的报文域输入的参数有■该报文域所表示的长度的单位以1字节为单位(如IPv6首部中的静荷长度报文域);以4字节为单位(如IPv4首部中的首部长度报文域);以8字节为单位,且该报文域所表示的长度(字节数)=(该报文域的值+1)*8,(如IPv6报文中路由扩展首部中的长度报文域);■该报文域本身所占位置的宽度,如IPv4首部中的首部长度报文域占4个比特宽度,IPv6首部中的静荷长度报文域占2个字节宽度;■该报文域所表示的长度的起始报文域序号;■该报文域所表示的长度的结束报文域序号;●检验和报文域该种报文域的填充内容是该报文某段内容的检验和的值,归属该种类型的报文域输入的参数有■该报文域本身所占字节数,如IPv4首部中的首部检验和报文域占2个字节;■该检验和所采用的算法名称,如反码求和检验和、ISO检验和、CRC检验和等;■该检验和要计算的报文内容的起始报文域序号;
■该检验和要计算的报文内容的结束报文域序号;以上几种类型报文域的组合所能构造的报文几乎可以涵盖数据通信领域的所有协议报文,也可以构造出其它任意的异常报文。
参考图2,该图是本发明基于上述定义的报文域类型的报文生成方法的具体实现流程图,主要包括如下步骤步骤11,将待生成的数据通信协议具体报文格式的各个报文域归类到上述的比特报文域、字节报文域、字符串报文域、长度报文域以及检验和报文域;步骤12,按照数据通信协议报文具体格式中的报文域顺序依次对归类的报文域进行编号;步骤13,确定归类到所述的比特报文域、字节报文域、字符串报文域中的各个报文域在待生成数据通信协议具体报文格式里所占长度及值,以及所述的长度报文域所占长度、所代表的长度单位、所代表长度范围的起始报文域序号和结束报文域序号,所述的检验和报文域所占长度、所检验范围的起始报文域序号和结束报文域序号以及所采用的检验和算法;步骤14,按照报文域的编号顺序,依次输入该报文的所有报文域参数值,若是长度报文域或检验和报文域,则输入报文域的值置为0;步骤15,根据输入报文域的参数值,依次生成各个报文域的比特流,并把该比特流附加到该报文已生成比特流的尾部;步骤16,把该报文的完整比特流转换为字节流;步骤17,根据所述长度报文域所代表长度范围的起始报文域序号和结束报文域序号确定所述长度报文域的值,然后把得到的值填入该长度报文域在上述报文字节流的相应位置;步骤18,按照从最后一个检验和报文域到最前一个检验和报文域的顺序,

表二在图3中,文件头对象(Header Object)是一个容器,包含若干个子对象,分别是文件描述对象(HMFD)、媒体描述对象(HMMD)、流描述对象(HMSD)、流索引表对象(STTB)和扩展信息对象(INFO)。根据实际设置,HMF文件头对象可能包含一个或多个HMMD、一个或多个HMSD,而STTB和INFO则是可选的。在存储HMF文件头时,可以按图4所示将结构树中的每个节点独立存储,所有子对象在文件头中的存储位置是任意的,并在解析HMF文件头时再行恢复上述子对象之间的树状结构,下面将逐一对树状结构中的每类节点详加说明。
1、文件头对象(HMHD),用于对HMF文件头进行标识。如表三所示,所有的子对象将作为HMHD的数据内容存放在其Object data域中,HMHD的Object Size域记录的是整个HMF文件头的总长度。

表三2、文件描述对象(HMFD),用于描述HMF文件的全局信息,包括该<p>1.字节报文域,占6个字节,值为e0000af0c661;2.字节报文域,占6个字节,值为000c76dd94e6;3.字节报文域,占2个字节,值为0800;4.比特报文域,占4个比特,值为4;5.长度报文域,以4字节为单位,占4个比特,起始报文域序号为4,结束报文域序号为15;6.字节报文域,占1个字节,值为00;7.长度报文域,以1字节为单位,占2个字节,起始报文域序号为4,结束报文域序号为21;8.字节报文域,占2个字节,值为1739;9.比特报文域,占3个比特,值为0;10.比特报文域,占13个比特,值为00;11.字节报文域,占1个字节,值为80;12.字节报文域,占1个字节字节,值为01;13.检验和报文域,占2个字节,采用反码求和算法,起始报文域序号为4,结束报文域序号为15;14.字节报文域,占4个字节,值为0a6eb50c;15.字节报文域,占4个字节,值为0a6eb55e;16.字节报文域,占1个字节,值为08;17.字节报文域,占1个字节,值为00;18.检验和报文域,占2个字节,采用反码求和算法,起始报文域序号为16,结束报文域序号为21;19.字节报文域,占2个字节,值为0400;20.字节报文域,占2个字节,值为0900;21.字节报文域,占32个字节,值为
6162636465666768696a6b6c6d6e6f7071727374757677616263646566676869按照图2所示本发明的实现流程,可输出该报文完整的字节流为e0000af0c661000c76dd94e608004500003c173900008001a4410a6eb50c0a6eb55e0800405c040009006162636465666768696a6b6c6d6e6f7071727374757677616263646566676869。
第二个例子为构造IGMPv2 Membership Query报文,该报文的具体内容如表2所示,报文域的值为16进制

按顺序输入如下数据1.字节报文域,占6个字节,值为01005e000009;2.字节报文域,占6个字节,值为00c0dfb279af;3.字节报文域,占2个字节,值为0800;4.比特报文域,占4个比特,值为4;5.长度报文域,以4字节为单位,占4个比特,起始报文域序号为4,结束报文域序号为16;6.字节报文域,占1个字节,值为00;7.长度报文域,以1字节为单位,占2个字节,起始报文域序号为4,结束报文域序号为20;8.字节报文域,占2个字节,值为7c19;9.比特报文域,占3个比特,值为0;10.比特报文域,占13个比特,值为00;11.字节报文域,占1个字节,值为01;12.字节报文域,占1个字节字节,值为02;13.检验和报文域,占2个字节,采用反码求和算法,起始报文域序号为4,结束报文域序号为16;14.字节报文域,占4个字节,值为0a6e8a41;15.字节报文域,占4个字节,值为e0000009;16.字节报文域,占4个字节,值为94040000;17.字节报文域,占1个字节,值为16;18.字节报文域,占1个字节,值为00;19.检验和报文域,占2个字节,采用反码求和算法,起始报文域序号为17,结束报文域序号为20;20.字节报文域,占4个字节,值为e0000009;
21.字节报文域,占14个字节,值为0000000000000000000000000000;按照图2所示本发明的实现流程,可输出该报文完整的字节流为01005e00000900c0dfb279af0800460000207c190000010234060a6e8a41e000000994040000160009f6e00000090000000000000000000000000000。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种报文生成方法,用于生成各种数据通信协议报文,其特征在于,包括如下步骤a、将各个数据通信协议具体报文格式的各种报文域抽象分类划分为比特报文域、字节报文域、字符串报文域、长度报文域以及检验和报文域;b、将待生成的数据通信协议具体报文格式的各个报文域归类到所述的比特报文域、字节报文域、字符串报文域、长度报文域以及检验和报文域;c、根据待生成的数据通信协议具体报文格式的各个报文域在其归属的所述比特报文域、字节报文域、字符串报文域、长度报文域或检验和报文域的输入参数值,整理输出该数据通信协议报文的完整字节流。
2.根据权利要求1所述的报文生成方法,其特征在于,步骤b包括b1、按照数据通信协议报文具体格式中的报文域顺序依次对归类的报文域进行编号;b2、确定归类到所述的比特报文域、字节报文域、字符串报文域中的各个报文域在待生成数据通信协议具体报文格式里所占长度及值,以及所述的长度报文域所占长度、所代表的长度单位、所代表长度范围的起始报文域序号和结束报文域序号,所述的检验和报文域所占长度、所检验范围的起始报文域序号和结束报文域序号以及所采用的检验和算法;b3、按照报文域的编号顺序,依次输入该报文的所有报文域参数值,若是长度报文域或检验和报文域,则输入报文域的值置为0;步骤c包括c1、根据输入报文域的参数值,依次生成各个报文域的比特流,并把该比特流附加到该报文已生成比特流的尾部;c2、把该报文的完整比特流转换为字节流;c3、根据所述长度报文域所代表长度范围的起始报文域序号和结束报文域序号确定所述长度报文域的值,然后把得到的值填入该长度报文域在上述报文字节流的相应位置;c4、按照从最后一个检验和报文域到最前一个检验和报文域的顺序,依次根据所述检验和报文域所检验范围的起始报文域序号和结束报文域序号,以及所采用的检验和算法确定所述检验和报文域的值,然后把得到的值填入该检验和报文域在上述报文字节流的相应位置;c5、输出该报文的完整字节流。
全文摘要
本发明涉及一种报文生成方法,用于生成各种数据通信协议报文,该方法包括如下步骤将各个数据通信协议具体报文格式的各种报文域抽象分类划分为比特报文域、字节报文域、字符串报文域、长度报文域以及检验和报文域;将待生成的数据通信协议具体报文格式的各个报文域归类到所述的比特报文域、字节报文域、字符串报文域、长度报文域以及检验和报文域;根据待生成的数据通信协议具体报文格式的各个报文域在其归属的所述比特报文域、字节报文域、字符串报文域、长度报文域或检验和报文域的输入参数值,整理输出该数据通信协议报文的完整字节流。本发明可实现生成任意数据通信协议的报文。
文档编号H04L29/06GK1859222SQ20051003640
公开日2006年11月8日 申请日期2005年8月9日 优先权日2005年8月9日
发明者吴哲 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1