System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及代码生成领域,具体涉及一种基于模型精化的网络通信协议代码生成方法。
技术介绍
1、随着互联网的快速发展,计算机之间无时无刻不存在通信,计算机信息的保密问题显得越来越重要。数据保密变换或密码技术,是对计算机信息进行保护的最实用和最可靠的方法。密码是实现秘密通信的主要手段,是隐蔽语言、文字、图象的特种符号。凡是用特种符号按照通信双方约定的方法把电文的原形隐蔽起来,不为第三者所识别的通信方式称为密码通信。在计算机通信中,采用密码技术将信息隐蔽起来,再将隐蔽后的信息传输出去,使信息在传输过程中即使被窃取或载获,窃取者也不能了解信息的内容,从而保证信息传输的安全。
2、在网络通信协议设计和实现中,通常在协议模型设计完成后,开发人员手动实现的方式进行协议的实现,因此会存在开发人员的实现引入潜在安全隐患的问题。由于存在开发人员对协议理解不准确的可能性,协议的实现语义可能和模型定义的语义不一致,使得实现出现错误。此外,直接进行协议在网络节点的部署会使得这样的错误难以发现,但如果在本地人工实现协议进行模拟测试,会增大开发人员的工作量,且仍不能完全保证部署的人工代码和模拟的人工实现代码的一致性。已知的通信协议和加解密算法都是人工编写的,容易出现差错。对于这个问题,目前还没有有效的解决方案。
技术实现思路
1、本专利技术的目的是针对现有技术的不足,提出一种基于模型精化的网络通信协议代码生成方法,通过构建的模型和网络通信协议库、加密协议库进行代码生成和精化,其中通过通信方法精化技
2、为实现上述目的,本专利技术采用以下技术方案:
3、一种基于模型精化的网络通信协议代码生成方法,包括以下步骤:
4、1)预先构建模型,该模型通过uml图描述了需要实现的每个进程的类及其成员变量和成员方法,并指定成员方法的类型;还通过有限状态自动机描述每个进程的可能状态和状态之间的转换;
5、2)预先构建网络通信协议库commlib和加密协议库cryptolib,该commlib基于数据链路层和传输层数据包传输的网络通信接口函数,实现进程之间的模拟通信和真实通信;该cryptolib基于对数据进行对称加密、非对称加密和数据签名的接口函数,实现进程之间通信数据的加解密;
6、3)代码生成时,读入预先构建的模型,利用该模型获取生成代码所需的数据结构,包括进程数据结构process和用户自定义的数据结构类型usertype;
7、4)针对每个usertype进行代码生成,根据生成的代码字符串生成用户定义类型头文件usertype.hpp;
8、5)针对每个process进程,利用模型生成对应的头文件,利用commlib、cryptolib和模型生成对应的源文件;
9、6)根据所述usertype.hpp文件、头文件和源文件的文件名,在文件系统中生成python脚本文件,该脚本对源文件进行编译,再对每个进程进编译,生成一个二进制执行文件。
10、进一步地,步骤1)中有限状态自动机包含状态集和边集,每个状态用一个唯一id进行标识,每条边通过一个三元组了表示起始状态、结束状态以及在状态之间进行转换时要执行的代码。
11、进一步地,步骤2)中模拟通信包括同步信道和/或异步信道;
12、真实通信中利用libpcap库的监听方法对发送的自定义的以太网帧进行监听,实现局域网内的以太网通信;使用af_inet地址族和sock_dgram表示发送无保障的网络数据报,实现udp通信;和/或
13、cryptolib含有的加密算法包括aes、rsa和hash。
14、进一步地,步骤4)中生成usertype.hpp的步骤包括:
15、利用一个空字符串来存储目前已生成的代码字符串;
16、对每一个usertype进行代码生成,以usertype的名称为类的名称生成一个该类的定义的字符串,该类的成员数据和方法的定义即按照usertype中的定义依次生成,将生成好的字符串拼接到已生成代码字符串后;
17、在文件系统中创建usertype.hpp,并将拼接后的代码字符串输入到该usertype.hpp中。
18、进一步地,步骤5)中生成的头文件为c++头文件,其中每个头文件对应定义的一个网络通信节点中的进程,该头文件中仅包含一个类的定义。
19、进一步地,步骤5)中头文件在main函数中描述通信节点进程的行为逻辑,定义当前进程公钥私钥信息以及其他通信节点进程的公钥信息,并通过有限状态机实现当前进程的状态迁移和行为逻辑。
20、进一步地,步骤5)中生成头文件的步骤包括:
21、1)创建一个空字符串作为已生成的字符串;
22、2)生成进程依赖的头文件,将生成的字符串拼接到已有的字符串后;
23、3)生成该进程的数据结构定义,包括类成员变量、成员方法及声明,并拼接到已生成字符串后;
24、4)根据模型对该进程的行为对应的有限状态机进行代码生成,并将生成的代码拼接到已生成字符串后;
25、5)在文件系统中创建该进程的名称创建头文件,并将生成的字符串写入该头文件中。
26、进一步地,根据模型对该进程的行为对应的有限状态机进行代码生成的方法为:用整型变量模拟状态,用while循环结构和switch-case分支模拟不同状态的迁移行为,以此生成代码。
27、进一步地,步骤5)中生成的源文件为c++源文件,其中每个源文件都与其同名的头文件相对应,在源文件中包含了commlib和cryptolib提供的接口和函数实现的含有通信操作的进程之间的通信方法和数据加密方法。
28、进一步地,步骤5)中生成源文件的步骤包括:
29、1)创建一个空字符串作为已生成的字符串;
30、2)根据进程非加密、非通信方法的定义,给出对普通方法实现的模板字符串,并将该字符串拼接到已生成字符串后;
31、3)对进程中每一个加密/解密方法,通过模型获得其使用的加密/解密算法,生成一段调用预先实现的数据加密库中的相关接口的代码,该代码作为该加密/解密方法的实现,将被拼接到已生成字符串后;
32、4)对进程中每一个接受网络数据包或者发送网络数据包的方法,通过模型获得的其使用的网络协议类型,生成一段调用预先实现的网络通信库中相关接口的代码,该代码作为接受/发送消息的方法的实现,将被拼接到已生成的字符串后;
33、5)在文件系统中以该进程的名称创建源文件,并将已生成的字符串写入该源文件中。
34、与现有技术相比,本专利技术的有益效果是:
35、本专利技术提供了linux平台下基于模型精化的网络通信协议本文档来自技高网...
【技术保护点】
1.一种基于模型精化的网络通信协议代码生成方法,其特征在于,包括以下步骤:
2.如权利要求1所述的方法,其特征在于,步骤1)中有限状态自动机包含状态集和边集,每个状态用一个唯一ID进行标识,每条边通过一个三元组了表示起始状态、结束状态以及在状态之间进行转换时要执行的代码。
3.如权利要求1所述的方法,其特征在于,步骤2)中模拟通信包括同步信道和/或异步信道;
4.如权利要求1所述的方法,其特征在于,步骤4)中生成UserType.hpp的步骤包括:
5.如权利要求1所述的方法,其特征在于,步骤5)中生成的头文件为C++头文件,其中每个头文件对应定义的一个网络通信节点中的进程,该头文件中仅包含一个类的定义。
6.如权利要求1或5所述的方法,其特征在于,步骤5)中头文件在main函数中描述通信节点进程的行为逻辑,定义当前进程公钥私钥信息以及其他通信节点进程的公钥信息,并通过有限状态机实现当前进程的状态迁移和行为逻辑。
7.如权利要求1或5所述的方法,其特征在于,步骤5)中生成头文件的步骤包括:
8.如
9.如权利要求1所述的方法,其特征在于,步骤5)中生成的源文件为C++源文件,其中每个源文件都与其同名的头文件相对应,在源文件中包含了CommLib和CryptoLib提供的接口和函数实现的含有通信操作的进程之间的通信方法和数据加密方法。
10.如权利要求9所述的方法,其特征在于,步骤5)中生成源文件的步骤包括:
...【技术特征摘要】
1.一种基于模型精化的网络通信协议代码生成方法,其特征在于,包括以下步骤:
2.如权利要求1所述的方法,其特征在于,步骤1)中有限状态自动机包含状态集和边集,每个状态用一个唯一id进行标识,每条边通过一个三元组了表示起始状态、结束状态以及在状态之间进行转换时要执行的代码。
3.如权利要求1所述的方法,其特征在于,步骤2)中模拟通信包括同步信道和/或异步信道;
4.如权利要求1所述的方法,其特征在于,步骤4)中生成usertype.hpp的步骤包括:
5.如权利要求1所述的方法,其特征在于,步骤5)中生成的头文件为c++头文件,其中每个头文件对应定义的一个网络通信节点中的进程,该头文件中仅包含一个类的定义。
6.如权利要求1或5所述的方法,其特征在于,步骤5)中头文件在main函数中描述通信节点进程的...
【专利技术属性】
技术研发人员:李勰,何锦龙,吴志林,
申请(专利权)人:中国科学院软件研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。