一种解析并管理十六进制数据日志文件的方法

文档序号:7930081阅读:253来源:国知局
专利名称:一种解析并管理十六进制数据日志文件的方法
技术领域
本发明涉及解读日志文件,具体说是一种解析并管理十六进制数据日志文件的方法。
背景技术
市面上绝大多数的大型通信软件与设备交互时,都是用的二进制、十六进制数据通信的,通常会形成十六进制数据日志文件,即所述日志文件中存储的内容是以十六进制数据的形式记录的。例如烽火通信公司的传输设备管理系统及传输设备之间通信时的数据会形成的一种日志文件,该日志文件的部分内容如图1所示,是采用十六进制数据存储的。由图1可见,该日志文件虽能完整的记录软件发送、接收的各类数据,但不具备任何的可读性。通常情况下,大型通信软件与设备间都用十六进制数据通信。所述软件是指传输网络管理系统或传输设备管理系统,所述设备是指所有的能与大型通信软件通信的传输设备。数据在计算机中的表示,通常最终以二进制的形式存在。但是二进制数太长了,用十六进制或八进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。所以只要管理系统要管理设备,任何情况下,各种命令一般都是用十六进制来进行的。目前市面上有很多免费抓包软件,可以截取通信软件产生的数据流。但是截取下来的数据流为十六进制数据, 不具备可读性。

发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种解析并管理十六进制数据日志文件的方法,可以分析通信软件产生的十六进制数据日志文件的内容,并结合相关通信协议,将用十六进制数据记录的日志文件的内容解读为可直接阅读的信息并换协议显示,便于管理、分析十六进制数据日志文件。为达到以上目的,本发明采取的技术方案是
一种解析并管理十六进制数据日志文件的方法,其特征在于,其步骤为 步骤1,在打开十六进制数据日志文件的过程中获取其以十六进制数据的形式记录的内容,用多维数组装载获取到的十六进制数据,
步骤2,将多维数组中的十六进制数据与相关通信协议结合起来分行分字节解析,使十六进制数据中的内容被解读为可直接阅读的信息并显示在人机交互界面上,所述人机交互界面采用多层显示方式,多角度解析十六进制数据,
所述相关通信协议为与日志文件对应的私有通信协议。在上述技术方案的基础上,步骤1的具体步骤包括
10、打开一个十六进制数据日志文件,在打开的同时,该日志文件中的十六进制数据被存到内存中;
所述十六进制数据日志文件中包含很多条命令记录,每个命令记录的格式为协议头+日志命令的数据,
20、针对日志文件的数据类型,创建CStorehdexArray类
将指向每条命令记录内部每个字节的指针、指向每条命令记录头的指针、记录每条命令记录的长度的整型变量三个元素,组成一个类,然后用这个类对象作为CArray模板类的元素,创建动态数组,边读边存十六进制数据,且能使用下标来直接获取元素,所述动态数组即作为装载获取到的十六进制数据的多维数组。在上述技术方案的基础上,步骤2的具体步骤包括
30、人机交互界面设计把人机交互界面分为至上而下的三栏, 第一栏显示每条命令记录的协议头信息, 第二栏显示每条命令记录的具体内容, 第三栏显示原始的十六进制数据,
日志中每一个命令记录都有遵循统一的协议格式,将每一条日志记录中的协议头的字段名抽象出来定义成一个结构体,以便将其显示在人机交互界面的第一栏中,所述协议头中包含以下信息每次命令的日期、时间、方向、类型、命令名称,
40、设计在软件第一栏插入各条命令记录的协议头的函数,该函数中定义有与协议头对应的结构体,该结构体用于构造协议头数据的数组,
对存储到结构体中的日志数据采用一个字节一个字节解析数据的方式进行解析处理, 最后填到适当的字段中,再用控件将几个字段并排的显示出来,
50、第一栏的每一行内容都会对应一条命令记录,则第二栏和第三栏的内容需根据第一栏中命令记录的变化而变化,为此,定义一个接口函数,把相关变更的消息发给第二栏和第三栏,所述接口函数用消息映射来传递各类数据到人机交互界面相应栏中,
60、根据接口函数发来的信息,在第三栏将日志的原始数据分行显示,并在第二栏中显示相应的命令记录解析后的信息。在上述技术方案的基础上,所述在第二栏中显示相应的命令记录解析后的信息的具体步骤为
根据接口函数发来的信息,调用显示第二栏的日志解析内容的函数,再次根据通信协议,先判断出协议头对应的日志数据的基本类型,再根据不同的日志数据的基本类型解析出十六进制数据对应的信息,最后将解析后的内容显示在第二栏中。本发明的目的在于提供一种解析并管理十六进制数据日志文件的方法,可以分析通信软件产生的十六进制数据日志文件的内容,并结合相关通信协议,将用十六进制数据记录的日志文件的内容解读为可直接阅读的信息并换协议显示,便于管理、分析十六进制数据日志文件。


本发明有如下附图
图1十六进制数据日志文件中的部分数据内容示意图, 图2解析后可直接阅读的信息示意图, 图3发明中涉及到的数据传递关系图。
具体实施例方式以下结合附图对本发明作进一步详细说明。本发明所述的解析并管理十六进制数据日志文件的方法,其步骤为
步骤1,在打开十六进制数据日志文件的过程中获取其以十六进制数据的形式记录的内容,用多维数组装载获取到的十六进制数据,
步骤2,将多维数组中的十六进制数据与相关通信协议结合起来分行分字节解析,使十六进制数据中的内容被解读为可直接阅读的信息并显示在人机交互界面上,所述人机交互界面采用多层显示方式,多角度解析十六进制数据,
所述相关通信协议为与日志文件对应的私有通信协议。利用本发明,则可对照各种私有通信协议,将日志文件中的十六进制数据转换为可读的数据结果并用人机交互界面显示。如图3所示,步骤1的具体步骤包括
10、用采用本发明所述方法的软件打开一个十六进制数据日志文件,在打开的同时,该日志文件中的十六进制数据被存到内存中;
所述十六进制数据日志文件中包含很多条命令记录,每个命令记录的格式为协议头 +日志命令的数据,每条命令记录的字节长度也不一样,因为命令本身不一样,如有的命令是下发查询设备的某一种状态,那命令记录的长度就比较长,
20、针对日志文件的数据类型,创建CStorehdexArray类本发明中设计了以下三个元素
1)指向每条命令记录内部每个字节的指针,用来解析记录中每个字节的含义;
2)指向每条命令记录头的指针,用来分隔每条记录;
3)记录每条命令记录的长度的整型变量;
首先将这三个元素组成一个类,类名为CStorehdex,然后用这个类对象作为CArray 模板类的元素,创建了 CStorehdexArray类(动态数组); 例如
class CStoreIndex
{
public:
const BYTE* m—pData; const BYTE* m—pBaseData; int m—nLength;
};
typedef CArray<CStoreIndex, CStoreIndex&> CStoreIndexArray; 在上面的描述中,表明是利用CArray创建一个类型数组,数组的每个元素都是一个类对象。这个数组名为CStorehdexArray,这是一个动态数组,数组里的元素是类 CStoreIndex的对象。由此可见,每个元素都是包括两个const (常数,const是一个C语言的关键字,它限定一个变量不允许被改变)型字节指针和一个整型变量。由上述的 typedef i吾句可见,CStoreIndexArray 是 CArray<CStoreIndex, CStoreIndex&>的另一种名称,是为了引用起来更方便而进行的一种宏定义。
本发明的第一部分,是利用VC中的数组的模板类CArray创建动态数组,存储十六进制数据日志文件中的大量十六进制数据。当我们任何时候需要一个结构来存储数据时, 我们第一个想到的就是用数组。只要数据类型相同,都可以存在自定义的数组中。但对于传统的数组,最大的限制是在初始化时必需定义该数组的元素个数。但对于一个十六进制数据日志文件来说,整个数据的长度,即命令记录的条数和每条日志命令的数据量都是无法预估的。所以,本发明思路的一部分就是使用动态数组边读边存十六进制数据。当然,这个动态数组还必须能像普通数组那样使用下标来直接获取元素,这和它的效率是直接相关的。即步骤1中所述的多维数为动态数组,边读边存十六进制数据,且能使用下标来直接获取元素。在数组的模板类CArray (CArray是支持与C语言中arrays相似的数组的模板类,利用它可以创建任何数据类型的类型安全数组。)的内部,的确保存着一块动态创建的内存块,它线性的存储已经存在的元素,从而保证了它可以像普通数组一样,用下标作为偏移量来直接获取元素,不过,这并不是它的全部,我们现在,所要考虑的问题是它如何动态的追加元素。数组的模板类CArray追加元素使用Add函数,非常的简单通用。此时,在CArray 的内部,将会删除之前的内存,而重新申请一块新的足以存放追加后所有元素的内存,虽然这对于频繁加减元素的操作来说,会大大的降低效率,但对于本发明的情况来说,数据只会在打开日志文件的时候一次性存到动态数组中,且此动作只进行一次。遵循软件设计简单够用即是最好的原则,本发明仍然采用CArray队列方式存储数据。即步骤1中所述的多维数为利用VC中的数组的模板类CArray创建的动态数组。如图3所示,步骤2的具体步骤包括
30、在设计了数据的存储方式后,接下来对人机交互界面做初步设计把人机交互界面分为至上而下的三栏,
第一栏显示每条命令记录的协议头信息, 第二栏显示每条命令记录的具体内容, 第三栏显示原始的十六进制数据,
例如直接利用MFC (微软公司的类库)的CSplitterWnd (拆分窗口类)类进行分栏。BOOL CMainFrameOnCreateClient(LPCREATESTRUCT lpcs, CCreateContext*
pContext)
{
Il TODO Add your specialized code here and/or call the base class CRect cr;
GetClientRect(&cr);
m—splitter· CreateStatic (this, 3,1);
m—splitter. CreateView(0,0,RUNTIME—CLASS(CCLogViewerView),
CSize (cr. Width (),cr. Height O /3),pContext ); m—splitter. CreateView(l,0,RUNTIME—CLASS(CCGraphView),
CSize (cr. Width (),cr. Height O /3),pContext ); m_splitter. CreateView(2, 0,RUNTIME_CLASS(CCTextView),CSize (cr. Width (), cr. Height () /3), pContext ); return TRUE;
}
上述函数说明人机交互界面分三栏,每一栏的高度为整个人机交互界面的1/3,并定义了每一栏的视图类名
第一栏显示每条命令记录的协议头信息,类名为CCLogViewerView ; 第二栏显示每条命令记录的具体内容,类名为CCGraphView ; 第三栏显示原始的十六进制数据,类名为CCTextView。经过上一步(步骤20)日志储存到多维数组中后,各指针就已经停到其初始位置, 此时再根据软件内部相关通信协议将日志数据解剖,分析出哪几位十六进制数是用来共同表达哪种含义;
日志中每一个命令记录都有遵循统一的协议格式,将每一条日志记录中的协议头的字段名抽象出来定义成一个结构体,那么无论日志记录是长是短,都是可以动态的存到相同的结构体中的。例如下表就是通信协议的协议头的具体示例 表1一种日志命令协议头定义说明
权利要求
1.一种解析并管理十六进制数据日志文件的方法,其特征在于,其步骤为步骤1,在打开十六进制数据日志文件的过程中获取其以十六进制数据的形式记录的内容,用多维数组装载获取到的十六进制数据,步骤2,将多维数组中的十六进制数据与相关通信协议结合起来分行分字节解析,使十六进制数据中的内容被解读为可直接阅读的信息并显示在人机交互界面上,所述人机交互界面采用多层显示方式,多角度解析十六进制数据,所述相关通信协议为与日志文件对应的私有通信协议。
2.如权利要求1所述的解析并管理十六进制数据日志文件的方法,其特征在于,步骤1 的具体步骤包括10、打开一个十六进制数据日志文件,在打开的同时,该日志文件中的十六进制数据被存到内存中;所述十六进制数据日志文件中包含很多条命令记录,每个命令记录的格式为协议头 +日志命令的数据,20、针对日志文件的数据类型,创建CStorehdexArray类将指向每条命令记录内部每个字节的指针、指向每条命令记录头的指针、记录每条命令记录的长度的整型变量三个元素,组成一个类,然后用这个类对象作为CArray模板类的元素,创建动态数组,边读边存十六进制数据,且能使用下标来直接获取元素,所述动态数组即作为装载获取到的十六进制数据的多维数组。
3.如权利要求2所述的解析并管理十六进制数据日志文件的方法,其特征在于,步骤2 的具体步骤包括30、人机交互界面设计把人机交互界面分为至上而下的三栏, 第一栏显示每条命令记录的协议头信息, 第二栏显示每条命令记录的具体内容, 第三栏显示原始的十六进制数据,日志中每一个命令记录都有遵循统一的协议格式,将每一条日志记录中的协议头的字段名抽象出来定义成一个结构体,以便将其显示在人机交互界面的第一栏中,所述协议头中包含以下信息每次命令的日期、时间、方向、类型、命令名称,40、设计在软件第一栏插入各条命令记录的协议头的函数,该函数中定义有与协议头对应的结构体,该结构体用于构造协议头数据的数组,对存储到结构体中的日志数据采用一个字节一个字节解析数据的方式进行解析处理, 最后填到适当的字段中,再用控件将几个字段并排的显示出来,50、第一栏的每一行内容都会对应一条命令记录,则第二栏和第三栏的内容需根据第一栏中命令记录的变化而变化,为此,定义一个接口函数,把相关变更的消息发给第二栏和第三栏,所述接口函数用消息映射来传递各类数据到人机交互界面相应栏中,60、根据接口函数发来的信息,在第三栏将日志的原始数据分行显示,并在第二栏中显示相应的命令记录解析后的信息。
4.如权利要求3所述的解析并管理十六进制数据日志文件的方法,其特征在于所述在第二栏中显示相应的命令记录解析后的信息的具体步骤为根据接口函数发来的信息,调用显示第二栏的日志解析内容的函数,再次根据通信协议,先判断出协议头对应的日志数据的基本类型,再根据不同的日志数据的基本类型解析出十六进制数据对应的信息,最后将解析后的内容显示在第二栏中。
全文摘要
本发明涉及一种解析并管理十六进制数据日志文件的方法,其步骤为在打开十六进制数据日志文件的过程中获取其以十六进制数据的形式记录的内容,用多维数组装载获取到的十六进制数据;将多维数组中的十六进制数据与相关通信协议结合起来分行分字节解析,使十六进制数据中的内容被解读为可直接阅读的信息并显示在人机交互界面上,所述人机交互界面采用多层显示方式,所述相关通信协议为与日志文件对应的私有通信协议。本发明所述的方法,可以分析通信软件产生的十六进制数据日志文件的内容,并结合相关通信协议,将十六进制数据记录的日志文件的内容解读为可直接阅读的信息并换协议显示,便于管理、分析十六进制数据日志文件。
文档编号H04L29/06GK102447575SQ20111030064
公开日2012年5月9日 申请日期2011年10月8日 优先权日2011年10月8日
发明者喻宗杰 申请人:烽火通信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1