我现在正在使用winpcap开发一个项目,我知道被嗅探的数据包通常是分段的。如何重新组装这些TCP片段?是否有任何想法、建议或教程可用?我认为这是查看HTTP头文件的唯一方法...谢谢!
我现在正在使用winpcap开发一个项目,我知道被嗅探的数据包通常是分段的。如何重新组装这些TCP片段?是否有任何想法、建议或教程可用?我认为这是查看HTTP头文件的唯一方法...谢谢!
tcp是一种字节流协议。您的HTTP应用程序发送的字节序列被封装在TCP数据段中,在将数据传递到另一端的应用程序之前,字节流将被重新创建。
由于您正在使用WinPcap访问TCP数据段,因此需要转到段的数据部分。TCP标头具有固定长度的20个字节+一个可选部分,您需要使用WinPcap API确定该部分的长度。
TCP段中数据部分的长度是通过从IP数据报中的字段(从封装TCP段的IP数据报中)减去TCP标头长度(从TCP段中的一个字段获取)和IP标头长度(从IP数据报中的另一个字段获取)来确定总长度(从IP数据报的另一个字段获得)。
现在您已经拥有了完整的段长度和段内数据部分的长度,因此您知道HTTP请求数据开始的偏移量。
偏移量为:
total length-length of data part
or
length of ip-header + length of tcp header
我没有使用过WinPcap,因此您需要通过API了解如何获取这些字段。
另外,IP数据包可能会进一步分片,但我希望您只通过此API获得已重组的数据包。 您可以开始了!
PcapPlusPlus提供了这个功能的开箱即用版本,支持所有主流操作系统(包括Windows)。请查看TcpReassembly示例以查看工作代码,并查看API文档以了解如何使用TCP重组特性。
根据你试图被动重组的流量来源,你可能会遇到一些TCP混淆技术,旨在困惑那些试图做与你相同事情的人。请查看这篇关于不同操作系统重组行为的论文:链接。