点击上方↑↑↑蓝字[协议分析与还原]关注咱们缓存
“ 介绍TCP排序方法,分享一个Windows版的TCP排序工具。”网络
在分析协议的过程当中,不可避免地须要抓包。tcp
不管抓包条件如何优越,不管Windows下使用wireshark仍是Linux下使用tcpdump,不管是在我的机器网卡仍是骨干网络的分光分流口,当pcap被保存,当pcap文件被打开,都会碰到报文乱序、重传的状况,有时报文状况会至关的糟糕,而且至关的广泛,这是一种正常的技术现象,只要是抓包就会碰到的现象。工具
在协议解析系统中,首先要处理的就是TCP乱序重传的问题,不然,不少信息就解析不出来。spa
在协议分析过程当中,也要处理TCP乱序重传问题,不然,分析就会遇到不少困难。命令行
毕竟人脑并行处理的能力有限,当TCP报文的乱序严重影响到分析过程的时候,最好的解决方案是将报文的顺序调整正确,即对pcap内的报文进行排序。若是报文数量较少,可使用WireEdit工具手动对pcap包内的报文进行调整,对一个个数据帧进行剪切、粘帖、删除都很顺手,虽然每次操做都会消耗必定的时间。排序
有须要WireEdit的朋友,请发送“wireedit”获取下载地址。token
当一个pcap内报文数量不少时,手动调整就很不现实了,迫切须要有一个对TCP进行排序的工具对报文进行排序。在网上一直没找到合适的工具。接口
一个可正常使用的还原解析系统,通常都实现了TCP排序及读包处理的过程,若是系统的TCP排序模块留有接口,读入pcap文件,输出排序好TCP的pcap文件,那咱们就能够借助解析系统来实现TCP排序。但不少时候,因为不少缘由,协议还原解析系统并不能很好地知足须要,所以在这里提供一个简单的对pcap内的TCP排序的工具,发送“tcpsort”获取下载地址。进程
本文将首先介绍TCP排序原理,而后介绍下这款简单的排序工具的使用方法,它能知足大部分的TCP排序需求。
01
—
TCP排序基本原理
咱们知道,TCP协议是有链接的协议,数据的传输具有可靠性,在协议控制层对数据传输过程及内容的正确性及可靠性进行保证。
对TCP IP协议的介绍可参考以前的文章:
TCP排序就是利用TCP协议的可靠性特征,来使数据包的顺序正确,从而不影响协议的分析与解析过程。
一个常见的TCP报文,在以太头、IP头以后,就是TCP协议头了,TCP头格式以下:
熟悉TCP协议的同志应该知道,TCP头内的seq及ACK两个整数就是用来进行可靠性保证的关键字段。
每一个报文根据以前已传输的数据内容体的长度,有一个本身的seq,固然,seq不必定惟一,由于有空包的存在,同时,seq从syn包的seq开始,同一个TCP流内,同一个方向的seq是递增的,递增值与TCP包内传输的内容体长度字节数相关。在咱们使用wireshark看报文的时候,会在TCP头的解析内,看到一个nextseq值,这个值在报文中并不存在,是根据当前报文长度算出来的,咱们在TCP排序过程当中也会事先算好nextseq值。就像下面这个例子:
另外,seq值的递增,须要注意,根据协议标准,syn包的下一个包,seq值是加一的,而不会由于syn包内没有数据内容而相等,上下行都是这样子。
对于ACK,通常是标明所回应的另外一侧的报文的序号,即对应报文的seq,ACK在双向报文具有严格的交互关系时,须要保证上下行TCP报文的顺序的TCP排序中须要用到,但应用面有限,更多的涉及到协议应用层数据的处理,同时会使复杂性大增,咱们在对pcap的TCP排序中就能够简化掉,不须要额外处理了。
通常来讲,简单的TCP排序只须要处理seq的变化就能够了,当一个方向指望的nextseq与比当前seq要小时,能够认为中间丢包了,就将当前报文缓存起来,等待中间报文的出现。
处理了乱序,固然要顺便简单处理下重传的数据了。为何说是简单处理呢?由于严格按协议来处理太复杂了。
TCP头中有一个字段叫checksum,就是校验和,是报文内容的CRC32值,理论上咱们能够用它来判断是否存在报文的重传,但对排序的实现而言,须要保存以前的checksum值,太不合算了,因此实际实现过程当中没有选取它来判断重传。
同时,TCP协议的重传,是能够重传某一部分数据的,这在理论上,会致使重传相关的两个报文内容出现部分包含的状况,这种重传在实际抓包过程当中出现不多,咱们在排序中就不处理了。
把复杂状况排除,剩下的场景就简单了,只须要根据seq,nextseq,ack这几项tcp头内的特征,与前一个已经排序好的报文相比,值小的话就判断是重传便可。
另外,排序还需考虑链接报文从中间开始的状况,此时,直接认为第一个包就是排序好的包。
本文介绍的对pcap内TCP排序的工具就是按照上面的方法实现的。
02
—
TCP排序工具介绍
这款工具是在Windows下使用vs2012开发的,名称为“sortpcap”。
工具主要使用到了winpcap库,所以使用的机器最好能装winpcap库,若是装了wireshark,默认该库就已经装上了,就不须要额外安装。
工具的主要功能是,读入一个pcap文件,对文件内的TCP报文进行排序处理,最终输出排序好的pcap文件。
工具比较简单,使用命令行进行交互,但已知足了大部分的需求。使用过程很简单,能够选择在进程启动时参数中带文件名使用,像这样:
sortpcap.exe test3.pcap
回车后会马上对文件进行排序,输出结果。
也能够在启动后再输入须要排序的文件:
其中的test3.pcap为输入的待排序文件名称,可带路径。
最终输出的排序好的pcap文件被命名为“sort.原输入文件名”,存在运行目录下:
按任意键就会退出程序窗口。
下面一个pcap排序先后的内容对比,这里用的是一个只有一条连接的pcap文件。
排序前的文件内容:
排序后的文件内容:
排序效果肉眼可见,排序后文件内错误的是一些0字节报文和checksum校验错误。
这款工具基本能上知足了协议分析的需求,若是须要的话发送“tcpsort”获取下载地址,源码恕不公开,若是确实须要源码,可与我联系。
须要注意,这个工具仅针对协议分析过程当中的TCP排序需求实现,没有考虑其它的应用场景,因此若是须要在大型解析系统中使用的话,还需考虑特定状况。
TCP排序工具的介绍到此就结束了,欢迎扩散,共同提升。
长按进行关注,时刻进行交流。
点击右下方“在看”,与朋友们一块儿分享吧↘