转载:http://www.google.com.hk/patents/CN103095835A?cl=zh&dq=ininventor:
摘要
一种基于报警系统通信数据包的合理构造与正确解析的实现方法,涉及计算机网络安全技术领域。利用定长数据包头标识作为数据包特征标识,在数据包头标识后面设定长数据包长度值,系统在接收数据后可根据数据包长度解析出包的最终大小,从而解析出完整数据包,无需遍历到包尾就知道包的整个大小。利用抽象语法标记的编码方式编码,把数据划分出操作类型Cmd和操作内容Value;其中Key对应数据包包头,Length对应数据长度,Cmd和Value一起对应数据;利用所述的编码及解码规则对Key、Length、Cmd和Value进行编码,形成比特流数据包,并通过专用加密协议对数据内容进行加密及解密。安全性与传输速度明显提高。
权利要求(5)
1.种基于报警系统通信数据包的合理构造与正确解析的实现方法,包含安防通信数据的通讯格式,对数据包进行合理构造(construct)和正确解析(parse),即制定编码解码规则,用于主机与服务器,服务器与监控中心之间通过TCP网络连接的方式进行通信;其特征在于,所述合理构造(construct)是指通过在TCP/IP原理之上实现包(package)的合理构造,利用定长数据包头标识作为数据包特征标识,在数据包头标识后面设定长数据包长度值,系统在接收数据后可根据数据包长度解析出包的最终大小,从而解析出完整数据包,无需遍历到包尾就知道包(package)的整个大小。
2.据权利要求1所述的基于报警系统通信数据包的合理构造与正确解析的实现方法,其特征在于,所述数据包的数据存储方式为: struct packet{USHORT key;UINT Ien;void *data; }; 其中,Key包头标识,Len整包长度,包含数据包头、包长,内容Data为用户数据;根据用户输入内容进行适当的封装处理得到新包并与解码形成一一对应关系;数据包格式如下:
3.据权利要求1所述的基于报警系统通信数据包的合理构造与正确解析的实现方法,其特征在于,利用抽象语法标记的编码方式编码;抽象语法标记ASN (Abstract SyntaxNotation)的长度确定的编码方式,是由4部分组成(Identifier octets、Length octets、Command octets、Contents octets)即是 Key-Length-Cmd-Value 模型,为了区分具体的操作,把数据划分出操作类型Cmd和操作内容Value;其中Key对应数据包包头;Length对应数据长度;Cmd和Value —起对应数据。
4.据权利要求3所述的基于报警系统通信数据包的合理构造与正确解析的实现方法,其特征在于,长度字段Length表示数值的长度;命令字段Cmd表示消息类型;内容字段Content表示实际的数值。
5.据权利要求1所述的基于报警系统通信数据包的合理构造与正确解析的实现方法,其特征在于,实现方法是利用所述的编码及解码规则完成,指对Key、Length、Cmd和Value进行编码,形成比特流数据包,并通过专用加密协议对数据内容进行加密及解密。
说明
基于报警系统通信数据包的合理构造与正确解析的实现方法
技术领域
[0001] 本发明涉及一种对网络数据包的合理构造(construct)和正确解析(parse)的实现方法,特别是基于报警系统通信数据包的合理构造与正确解析的实现方法。
背景技术
[0002] 随着计算机网络的迅猛发展,应用领域的日益广泛,千家万户的安全问题受到人们越来越多的关注。安防产品作为保护用户财产安全的一种有效手段,已逐步发展成为计算机网络安全领域的一个研究方向,在传统的安防产品中,标准各异,通信协议不健全(罗万杰,报警信息全兼容研究2008)数据的正确封装和解析难已实现,数据透明传输极易被泄露。
[0003] 本研究针对传统的安防通信协议技术缺陷,提出一种更加科学的方法显得极为重要,为此本发明提出了一种合理高效的数据处理方式ILD,其中“I”为“Identity”的简写,“L”为“Length”的简写,“D”为“Data”的简写,数据内容,即:数据包组成由数据包头标识、数据长度、数据内容表示。此种方法解决了传统网络报警通信协议的数据不能正确解析的问题,采用动态加密方式对数据进行加密,解决传统网络报警通信中数据透明传输问题。在传统安防通信协议基础之上实现更加合理,数据更加安全的方法。
发明内容
[0004] 本发明的目的在于提出并设计一种基于报警系统通信数据包的合理构造与正确解析的实现方法,以降低误报率和提高数据解包率,增加数据全安性;克服传统安防协议中数据的正确封装和解析难以实现,数据透明传输易被泄露的技术缺陷。
[0005] 实现本发明目的之技术方案如下:一种基于报警系统通信数据包的合理构造与正确解析的实现方法,包含安防通信数据的通讯格式,对数据包进行合理构造(construct)和正确解析(parse),即制定编码解码规则,用于主机与服务器,服务器与监控中心之间通过TCP网络连接的方式进行通信;所述的合理构造(construct)是指通过在TCP/IP原理之上实现包(package)的合理构造;利用定长数据包头标识作为数据包特征标识,在数据包头标识后面设定长数据包长度值,系统在接收数据后可根据数据包长度解析出包的最终大小,从而解析出完整数据包,无需遍历到包尾就知道包(package)的整个大小。
[0006] 进一步地,所述基于报警系统通信数据包的合理构造与正确解析的实现方法,所
述数据包的数据存储方式为:
[0007]struct packet{
USHORT kev UINT len; void 氺data;
I;
[0008] 其中,Key包头标识,Len整包长度,包含数据包头、包长,内容Data为用户数据;根据用户输入内容进行适当的封装处理得到新包并与解码形成一一对应关系。数据包格式如下:
[0009]
[0010] 进一步地,所述基于报警系统通信数据包的合理构造与正确解析及实现方法,利用抽象语法标记的编码方式编码;抽象语法标记ASN (Abstract Syntax Notation)的长度确定的编码方式,是由 4 部分组成(Identifier octets、Lengthoctets、Command octets、Contents octets)即是Key-Length-Cmd-Value模型,为了区分具体的操作,把数据划分出操作类型Cmd和操作内容Value;其中KEY对应数据包包头;Length对应数据长度;Cmd和Value 一起对应数据。
[0011] 更进一步地,所述基于报警系统通信数据包的合理构造与正确解析及实现方法,其中,长度字段Length表示数值的长度;命令字段Cmd表示消息类型;内容字段Content表示实际的数值。
[0012] 更进一步地,所述基于报警系统通信数据包的合理构造与正确解析及实现方法,实现方法是利用所述的编码及解码规则完成,指对Key、Length、Cmd和Value进行编码,形成比特流数据包,并通过专用加密协议对数据内容进行加密及解密。
[0013] 通过在TCP/IP原理上实现包的合理构造,使之能够正确解析。该方法利用定长数据包头标识作为数据包特征标识,在TCP传输过程中,上层应用可根据此包标识正确的区分数据包,解决传统网络报警数据包的正确区分难,甚至有的不能正确解析的问题。
[0014] 在数据包中加定长数据包长度标识,使之能够快速的解决数据包的完整性与否,该方法在数据包头标识后面紧跟定长数据包长度值,在接收数据后可根据数据包长度值解出此包的最终大小,从而解析出完整数据包。利用此方式可以使包快速的知道完整与否,相比传统的网络报警协议即通信时在数据尾部加固定结束标识,增加了解析时的时间复杂度(由于要从头到尾找结尾标识,会依次比较,直到最后,如果数据包内容中含有和数据结尾标识相同的字符编码,那么数据将由于标识相同而不能正确解出完整数据包,从而导致设计上不合理引起数据误包,并非真正数据包丢失),而数据包标识加长度标识ILD则可以根据包头后面紧跟的包长标识,无需遍历到包尾就知道包的整个大小,从而速度极快,时间复杂度为常数级O (I ),且由于数据包在发送时,包头标识始终加在数据内容前,无需在数据内容中遍历数据头标识,从而避免由于数据内容中出现与数据标识相同的字符编码而引起误包操作,而传统的网络报警协议则会跟随数据内容的长短而变化,因此他的时间复杂度为0(n),线性),安全,透明。数据内容加动态加密的方式,使数据更加安全,加密密钥由服务器生成登陆成功时返回,整个通信过程中均需要用到此动态生成的密钥才能与服务器正常通信,如不正确将其断开,可以适当防止一些恶意攻击。安全性:由于传统的网络报警是以透明的方式发送,此种方式极易被抓获,从而信息被破解,甚至可以轻易的被用来攻击服务器,造成服务器压力,而ILD能够从一定程度上削弱这种风险,一是数据内容加密(DATA,用户可以自定义加密方式形成新的DATA),不易被确解;二是密钥是动态生成,就算抓住了也和服务器生成的不对应。从而被服务器主动断开。基于上述特点,经过实际网络中测试发现,解包速度明显提升。正常情况下TCP粘包处理,比较次数明显降底,通常为一次命中。数据通过抓包工具观察数据乱码。
[0015] 本发明使ILD通信协议通过长连接的方式进行连接,确保了主机、服务器、监控中心之间的信息传输实时性。
[0016] ILD通讯协议所使用的数据包含了时间信息,所以要求设备能与服务器时间保持一致,在主机连接服务器时首先进行校时处理。
[0017] 与传统安防报警系统通信系统技术比较,本发明具有突出的优点与显著的积极效果O
[0018] (I)传输速度显著的提高。传统的网络报警协议,其通信在数据尾部加固定结束标识,由于要从头到尾找结尾标识,会依次比较,直到最后,从而增加了解析时的时间复杂度;本发明使数据包加入固定长度可以根据头后紧跟定长报长标识,无需遍历到包尾就知道包的整个大小,从而速度极快;传统的网络报警协议则会跟随数据内容的长短变化,因而它的时间复杂度为O (n),线性),而本发明使DID协议的时间复杂度为常数级O (I)。
[0019] (2)安全性。由于传统的网络报警是以透明的方式发送,此种方式极易被抓获,从而信息被破解,甚至可以轻易的被用来攻击服务器,造成服务器压力;而本发明能够从一定程度上削弱这种风险,一是数据内容加密,不易被破解,二是密钥是动态生成,就算抓住了也和服务器生成的不对应,从而被服务器主动断开。
[0020] (3)经过实际网络中测试发现,本发明使解包速度明显提升。正常情况下TCP粘包处理,比较次数明显降低,通常为一次命中,几乎不影响应用程序的正常工作。
附图说明
[0021] 图1是本发明所述编码流程框图不意图。
[0022] 图2是本发明在网络通信实验中TCP实现框架示意图。
[0023] 图3是本发明所述解码时粘包处理框图示意图。
具体实施方式
[0024] 下面结合附图与实施例,对本发明做进一步的详细说明。需要强调的是,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明构思及其权利要求之范围。
[0025] 一种基于报警系统通信数据包的合理构造与正确解析的实现方法,包含安防通信数据的通讯格式,对数据包进行合理构造(construct)和正确解析(parse),即制定编码解码规则,用于主机与服务器,服务器与监控中心之间通过TCP网络连接的方式进行通信;所述的合理构造(construct)是指通过在TCP/IP原理之上实现包(package)的合理构造;利用定长数据包头标识作为数据包特征标识,在数据包头标识后面设定长数据包长度值,系统在接收数据后可根据数据包长度解析出包的最终大小,从而解析出完整数据包,无需遍历到包尾就知道包(package)的整个大小。数据包格式如下:
[0026] 传统的:
[0027]
[0028] 本发明:
[0030] 可见传统数据通信取数据时,均要找到末尾结束标记由于查找遍历N数据空间,所以花费时间相对较长,而且会随数据η的增长成线性增加。
[0031] 本发明中,由于标识在数据域开头,所以第一次就命中,再偏移2字节,取到对应数据包大小,所以跟N数据大小无关,无需遍历N数据空间,所以速度明显加快。
[0032] 所述基于报警系统通信数据包的合理构造与正确解析及实现方法,所述数据包的
数据存储方式为:
[0033]
struct packet{ USHORT key;
UINT len; void *data;
};
[0034] 其中,Key包头标识,Len整包长度,包含数据包头、包长,内容Data为用户数据;根据用户输入内容进行适当的封装处理得到新包并与解码形成一一对应关系。图1示意了本发明所述编码流程,接收用户输入数据长度M,标识KEY,包总长LEN,DATA为最后编码后数据;初始开始,M=OlEN=ODATA=O ;接收数据流M,数据流M用户加密ENCODE (M)形成新数据M=ENCODE (M) ;DATA=KEY(标识长度)+LEN (包总长)+M (加密后数据内容长);数据封装完成。
[0035] 所述基于报警系统通信数据包的合理构造与正确解析的实现方法,利用抽象语法标记的编码方式编码;抽象语法标记ASN (Abstract Syntax Notation)的长度确定的编码方式,是由 4 部分组成(Identifier octets、Length octets、Command octets、Contentsoctets)即是Ken-Length-Cmd-Value模型,为了区分具体的操作,把数据划分出操作类型Cmd和操作内容Value;其中Key对应数据包包头;Length对应数据长度;Cmd和Value —起对应数据。
[0036] 更进一步地,其中,长度字段Length表示数值的长度;命令字段Cmd表示消息类型;内容字段content表示实际的数值。
[0037] 更进一步地,所述基于报警系统通信数据包的合理构造与正确解析的实现方法,实现方法是利用所述的编码及解码规则完成,指对Key、Length、Cmd和Value进行编码,形成比特流数据包,并通过专用加密协议对数据内容进行加密及解密。
[0038] 本发明在主机、服务器、监控中心之间的信息传输时形成ILD通信协议采用抽象语法标记的编码方式编码,并通过理想专用加密协议对数据内容进行加密,保证了有效数据内容的隐蔽性,防止数据被非法用户截取而做出相应的非法行为。
[0039] ILD编码就是指对Key、Length、Cmd和Value进行编码,形成比特流数据包;解码是编码的逆过程,是从比特流缓冲区中解析还原出原始数据。具体实施例如下:
[0040] I数据包格式:
[0041]
[0042]其中:
[0043]包头(Headkey):固定为 0x3995
[0044] 包长(Len):整过数据包头长度,2+4+2+内容长度
[0045] 命令(Cmd):用于指示该条数据包包含的内容类型
[0046] 内容(Content):实际数据内容
[0047] 2中心登陆:
[0048] 用于各中心连接到指定服务器,并从服务器上获取该中心所管辖的设备信息。
[0049]中心一服务器:Cmd=10001
[0050]
[0052]服务器一中心:Cmd=20001
[0053]
[0054] 注:服务器对中心登陆后,iret用于提示登陆后的返回状态:
[0055] Iret=000l:登陆成功
[0056] -1:登陆失败
[0057] -2:用户名或密码错误
[0058] -3:分组号不存在[0059] 其他:保留,未定义,便于以后扩展
[0060] 3报警信息:
[0061] 当报警主机产生报警后,通过网络的方式将报警警情(包含发送时间、报警位置、报警类型)等内容传输到指定服务器。
[0062](中心—服务器):Cmd=10010
[0064] 4主机信息
[0065] 报警主机为了保证警情传输到服务器而建立长连接,并定时向服务器发送在线监测信息,以保持TCP的正常连接,而需要向服务器发送主机相关信息。
[0066] 4.1 (主机一服务器)
[0067]心跳信息:Cmd=IOOl I
[0068]登陆信息:Cmd=10012
[0069]端口信息:Cmd=10013
[0070]其他信息:Cmd=1001X
[0072] 4.2 (服务器一主机)
[0073] 服务器收到主机的相关信息后,而做出的正确响应,返回服务器的相关状态信息。
[0074]心跳信息:Cmd=20011
[0075] 登陆信息:Cmd=20012 (校时信息)
[0076]端口 信息:Cmd=20013
[0077]其他信息:Cmd=2001X
[0079] 5远程编程控制
[0080] 接警中心可通过远程编程的方式对报警主机进行查询、修改、控制等操作,
[0081 ] 主机根据相应操作而做出必要的响应。
[0082] 5.1 (中心一服务器一主机)
[0083] 查询版本信息:Cmd=20022
[0084] 查询主机状态:Cmd=20023
[0085] 查询报警事件:Cmd=20024
[0086] 查询编程资料:Cmd=20025
[0087]远程控制:Cmd=20021
[0088]远程编程:Cmd=20026
[0089]
[0090]
[0091] 5.2 (主机一服务器一中心)
[0092] 查询版本信息:Cmd=10022
[0093] 查询主机状态:Cmd=10023
[0094] 查询报警事件:Cmd=10024
[0095] 查询编程资料:Cmd=10025
[0096]远程控制:Cmd=10021
[0097]远程编程:Cmd=10026
[0098]
[0099] 本发明的安全性通过以下实施例可以看出:
[0100] 传统数据通过数据包捕获软件“网络数据捕获手”捕获到数据包记录如下:
[0101] send buf245
[0102] 〃LA1129175311011888889300001121000000*FFFFFF_"。
[0103] 本发明则:通过专用加密后:
[0104][0105]
[0106] 网络通信实验实施例如下:
[0107] 1、实现框架:
[0108] 参见图2,网络通/[目程序米用TCP/IP协议的socket api编程实现。socket是面向客户机/服务器模型的。
[0109] 2、实验硬件环境:
[0110]服务器:pentium 13 微机
[0111]客户机:pentium 13 微机
[0112] 网络平台:由10兆共享式hub连接而成的局域网
[0113] 3、实验软件环境:
[0114]操作系统:windows2003
[0115]编程语目:visual c++7.0
[0116] 4、主要线程:
[0117] 编程采用多线程方式,服务器端共有两个线程:发送数据线程、发送统计显示线程。客户端共有三个线程:接收数据线程、接收预处理粘包线程、接收统计显示线程。其中,发送和接收线程优先级设为thread_priority_time_critical (最高优先级),预处理线程优先级为thread_priority_above_no;rmal (高于普通优先级),显示线程优先级为thread_priority—normal (普通优先级)。
[0118] 实验发送数据的数据结构如下所示:
[0120] 5、分包算法:
[0121] 针对可能存在的不同粘包现象,分包算法分别采取了相应的解决办法。其基本思路是首先将待处理的接收数据流(长度设为m)强行转换成预定的结构数据形式,并从中取出结构数据长度字段,即上述表中的n,而后根据η计算得到第一包数据长度,流程如图3所示。
[0122] 实验结果分析:
[0123] 1)在上述实验环境下,当发送方连续发送的若干包数据长度之和小于1500b时,常会出现粘包现象,接收方经预处理线程处理后能正确解开粘在一起的包。若程序中设置了 “发送不延迟":(setsockopt (socket_name,ipproto_tcp, tcp_nodelay, (char*)&on,sizeof on),其中on=l),则不存在粘包现象。
[0124] 2)当发送数据为每包Ikb〜2kb的不定长数据时,若发送间隔时间小于10ms,偶尔会出现粘包,接收方经预处理线程处理后能正确解开粘在一起的包。
[0125] 3)为测定处理粘包的时间,发送方依次循环发送长度为1.5kb、1.9kb、1.2kb、
1.6kb、1.0kb数据,共计1000包。为制造粘包现象,接收线程每次接收前都等待IOms,接收缓冲区设为5000b,结果接收方收到526包数据,其中长度为5000b的有175包。经预处理线程处理可得到1000包正确数据,粘包处理总时间小于1ms。
[0126] 实验结果表明,TCP粘包现象确实存在,但可通过接收方的预处理予以解决,而且处理时间非常短,例如实验中1000包数据总共处理时间不到1ms,几乎不影响应用程序的
正常工作。