1.一种TCP会话重组的方法,其特征在于,包括如下步骤:
S1:建立目标主机和本地主机的连接,建立一个空的TCP会话链表TcpSessionList;
S2:获取数据包,数据包包括以太网头信息、IP头信息和TCP数据,TCP数据包括syn层、fin层、seq层、len层、prev层、next层和tcpdata层;
S3:按照索引查找此数据包的syn层内存储的值syn,判断“syn==1”是否成立,若是“syn==1”成立,进入S4;若是“syn==1”不成立,进入S7;
S4:判断TCP会话链表TcpSessionList内部是否为空,若是TCP会话链表
TcpSessionList内部为空,进入S5;说明TCP会话链表TcpSessionList内部已有内容,进入S6;
S5:按照索引查找此数据包的IP头信息,根据IP头信息生成唯一会话ID,并生成节点序号TSLindex和建立对应的TCP会话组装链表TcpList,将此数据包对应的节点序号TSLindex、会话ID和TCP会话组装链表TcpList一一映射添加至TCP会话链表TcpSessionList中,其中,每个节点序号TSLindex对应一个节点;同时将此数据包对应的TCP数据添加至TCP会话组装链表TcpList中,在定位节点管理模块中存储此节点序号TSLindex,记为定位节点PostLindex,回到S2;
S6:释放定位节点管理模块中存储的节点序号TSLindex,按照索引查找此数据包的IP头信息,根据IP头信息生成唯一会话ID,获取TCP会话链表TcpSessionList中最大的TSLindex,并将TSLindex+1赋值给TSLindex,此TSLindex即为此数据包对应的节点序号TSLindex,建立对应的TCP会话组装链表TcpList,将此数据包对应的节点序号TSLindex、会话ID和TCP会话组装链表TcpList一一映射添加至TCP会话链表TcpSessionList的尾部,同时将此数据包对应的TCP数据添加至TCP会话组装链表TcpList中,在定位节点管理模块中存储此节点序号TSLindex,记为定位节点PostLindex,回到S2;
S7:根据定位节点管理模块中存储的节点序号TSLindex在TCP会话链表
TcpSessionList找到对应的节点,按照索引查找此数据包的IP头信息,根据IP头信息生成会话ID;
S8:将此会话ID与满足“PostLindex‑r≤TSLindex≤PostLindex+r”的所有节点序号TSLindex对应的会话ID进行逐一匹配,其中r为预设节点范围,若是匹配成功,进入S9;若是匹配失败,进入S10;
S9:获取匹配成功对应的节点序号TSLindex,并将此数据包对应的TCP数据添加至此节点序号TSLindex对应的TCP会话组装链表TcpList中,在定位节点管理模块中存储此节点序号TSLindex,记为定位节点PostLindex,回到S2;
S10:判断匹配过程中是否遍历所有节点,若是未遍历完所有节点,进入S11;若是遍历完所有节点,进入S12;
S11:将r+w赋值给r,其中w为节点范围扩大系数,能够通过自主学习进行调整,回到S8;
S12:获取TCP会话链表TcpSessionList中最大的TSLindex,并将TSLindex+1赋值给TSLindex,此TSLindex即为此数据包对应的节点序号TSLindex,建立对应的TCP会话组装链表TcpList,将此数据包对应的节点序号TSLindex、会话ID和TCP会话组装链表TcpList一一映射添加至TCP会话链表TcpSessionList的尾部,同时将此数据包对应的TCP数据添加至TCP会话组装链表TcpList中,在定位节点管理模块中存储此节点序号TSLindex,记为定位节点PostLindex,回到S2;
在上述步骤进行的同时,TCP会话组装链表TcpList根据TCP数据对数据包进行重组,还原原来的数据。
2.根据权利要求1所述的一种TCP会话重组的方法,其特征在于,TCP数据中,syn层用于记录一段数据的开头,用1来表示;fin层用于记录一段数据的结束,用0来表示;seq层用于记录此数据包的数据序列号;len层用于记录此数据包中要传输的数据的长度;prev层用于记录按照顺序的上一个数据包的数据序列号;next层用于记录按照顺序的下一个数据包的数据序列号;tcpdata层用于存储此数据包中要传输的数据。
3.根据权利要求2所述的一种TCP会话重组的方法,其特征在于,在同一个TCP数据中,next层的数据序列号为seq层的数据序列号加上此数据包中要传输的数据的长度。
4.根据权利要求3所述的一种TCP会话重组的方法,其特征在于,在TCP会话组装链表TcpList,选取syn层的值为1的数据包作为TCP会话组装链表TcpList的起始节点,获取此数据包对应next层的数据序列号,寻找与此数据序列号相同的seq层对应的数据包,作为TCP会话组装链表TcpList的下一个数据节点,并且将此数据节点对应prev层的数据序列号与上一个数据节点的seq层对应的数据序列号进行匹配,若是匹配失败,断开此数据包的链接,继续寻找与此数据包对应next层的数据序列号相同的seq层对应的数据包;若是匹配成功,继续上述步骤,组装TCP会话组装链表TcpList中的数据节点,当数据包对应next层的数据序列号为空且fin层的值为0时,完成TCP会话的组装。
5.根据权利要求4所述的一种TCP会话重组的方法,其特征在于,IP头信息以五元组的形式存储,包括源IP地址、目的IP地址、源端口、目的端口和协议号。
6.根据权利要求5所述的一种TCP会话重组的方法,其特征在于,在步骤S10中,判断为遍历完所有节点后,不再进入S12;而是将此数据包对应的会话ID进行存储,在步骤S5和S6中,每当生成唯一会话ID,都与存储的会话ID进行匹配,若是匹配失败,不进行操作;若是匹配成功,根据匹配成功的会话ID对应的源IP地址,向源IP地址对应的本地主机发送提示信息,提醒本地主机再次进行数据传输,并且将存储的会话ID进行删除。
7.一种TCP会话重组的装置,其特征在于,包括:
TCP传输通道建立模块,用于建立目标主机和本地主机的连接;数据包获取模块,用于获取数据包,数据包包括以太网头信息、IP头信息和TCP数据,TCP数据包括syn层、fin层、seq层、len层、prev层、next层和tcpdata层;
数据处理模块,用于对数据包的syn层内存储的值进行判断,对
TCP会话链表内部是否为空进行判断,生成会话ID,生成节点序号;
TCP会话链表管理模块,用于建立、存储和修改TCP会话链表;
TCP会话组装链表管理模块,用于建立、存储和修改TCP会话组装链表;
定位节点管理模块,用于存储和释放每次会话ID匹配成功后对应的节点序号;
会话ID匹配模块,用于对数据包对应的会话ID和TCP会话链表内部的会话ID进行匹配。
8.根据权利要求7所述的一种TCP会话重组的装置,其特征在于,还包括:
会话ID存储模块,用于存储找不到开头的数据包的会话ID;
提醒模块,用于根据会话ID存储模块中存储的会话ID提醒本地主机再次进行数据传输。