5

我现在正在使用 winpcap 开发一个项目..因为我知道被嗅探的数据包通常是碎片数据包。

如何重新组装这个 TCP 段?..任何想法,建议或教程可用?..

我认为这是我可以查看 HTTP 标头的唯一方法...

谢谢!..

4

5 回答 5

8

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

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

所以现在你有了总段长度和段内数据部分的长度。所以你知道http请求数据开始的偏移量。

偏移量是

total length-length of data part
or
length of ip-header + length of tcp header

我没有用过winpcap。因此您必须了解如何使用 api 获取这些字段。

ip 数据报也可能进一步碎片化,但我希望您只提供使用此 api 重新组装的数据报。你已准备好出发!

于 2010-02-15T05:33:54.657 回答
7

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

http://en.wikipedia.org/wiki/TCP_header#Packet_structure
http://en.wikipedia.org/wiki/IPv4#Header

于 2010-02-13T23:27:40.870 回答
3

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

于 2017-06-23T22:27:55.287 回答
2

根据您尝试被动重组的流量,您可能会遇到一些 TCP 混淆技术,这些技术旨在迷惑那些试图完全按照您正在尝试做的事情的人。查看这篇关于不同操作系统重组行为的论文。

于 2010-03-08T04:15:53.900 回答
1

libtins提供了以非常高级的方式执行TCP 流重组的类,因此您不必担心 TCP 内部结构。

于 2017-06-07T01:24:05.483 回答