Http 如何重新组装tcp段?

Http 如何重新组装tcp段?,http,visual-c++,networking,tcp,winpcap,Http,Visual C++,Networking,Tcp,Winpcap,我现在正在使用winpcap开发一个项目。正如我所知,被嗅探的数据包通常是碎片数据包 如何重新组装此TCP段?有什么想法、建议或教程吗 我认为这是查看HTTP头的唯一方法 谢谢 没有TCP片段这样的东西。IP协议有片段。TCP是一种流协议。通过遵循两侧的序列号,可以将流组装到其预期顺序。每个TCP数据包都进入IP级别,可以在那里进行碎片化。您可以通过收集所有片段并遵循从标头的片段偏移量来组装每个数据包。 您需要的所有信息都在标题中。维基百科的文章在解释每个字段是什么方面非常有用 tcp是一种字

我现在正在使用winpcap开发一个项目。正如我所知,被嗅探的数据包通常是碎片数据包

如何重新组装此TCP段?有什么想法、建议或教程吗

我认为这是查看HTTP头的唯一方法


谢谢

没有TCP片段这样的东西。IP协议有片段。TCP是一种流协议。通过遵循两侧的序列号,可以将流组装到其预期顺序。每个TCP数据包都进入IP级别,可以在那里进行碎片化。您可以通过收集所有片段并遵循从标头的片段偏移量来组装每个数据包。
您需要的所有信息都在标题中。维基百科的文章在解释每个字段是什么方面非常有用



tcp是一种字节流协议。 http应用程序发送的字节序列封装在tcp数据段中,并在将数据传递到另一端的应用程序之前重新创建字节流。 由于您使用winpcap访问tcp数据段,因此需要转到该段的数据部分。tcp头的固定长度为20字节+一个可选部分,您需要使用winpcap api确定该部分

tcp段中数据部分的长度通过从总长度(从ip数据报中的另一个字段获得)中减去tcp报头长度(从tcp段中的字段获得)和ip报头长度(从封装tcp段的ip数据报中的字段获得)来确定

现在你有了段的总长度和段内数据部分的长度。所以您知道http请求数据的起始位置

偏移量为

total length-length of data part
or
length of ip-header + length of tcp header
我没有使用winpcap。因此,您必须了解如何使用api获取这些字段


此外,ip数据报可能会进一步碎片化,但我希望您只提供使用此api重新组装的数据报。你可以走了

根据您尝试被动重组的通信量的不同,您可能会遇到一些TCP混淆技术,这些技术旨在混淆试图执行您正试图执行的操作的人。查看不同的操作系统重组行为。

提供了以非常高级的方式执行的类,因此您不必担心TCP内部的问题。

为所有主要操作系统(包括Windows)提供了这种开箱即用的功能。请查看示例以查看工作代码和API文档,以了解如何使用TCP重新组装功能