12

我正在尝试通过 libpcap 嗅探 HTTP 数据,并在处理 TCP 有效负载后获取所有 http 内容(标头+有效负载)。

根据我在编写 http sniffer (or any other application level sniffer)上的讨论,由于碎片,我面临着问题 - 我需要重建整个流(或对其进行碎片整理)以获得完整的 HTTP 数据包,这就是我需要一些帮助。

谢谢期待!!

4

5 回答 5

9

这真的很简单。只需从 pcap 获取以太网帧并从中提取 IP 数据包,重新组装任何碎片。然后,根据序列号对 IP 数据包中的 TCP 段重新排序,注意丢弃所有重复数据。然后,将该流作为 HTTP 流进行处理。当然,HTTP 不会以数据包的形式出现。它是一个应用层协议,但我敢肯定,一旦你完成了所有其他工作,这将是显而易见的。在执行所有这些操作时请注意对 IP 标头和 TCP 段进行校验和,以确保您的数据是正确的。此外,如果 pcap 碰巧错过了任何数据包,请确保适当地处理此问题。

为了帮助您了解Linux TCP 堆栈,应该在内核中出现这个过程时提供一个简明的参考。

于 2010-05-26T20:47:43.790 回答
5

您可以使用tcptrace重新组装 pcap 文件,而不是自己重新组装流。我相信-e会做到的。

一旦您将应用层数据整合在一起,您就可以应用简单的 HTTP 标头解析......来自诸如http://github.com/ry/http-parser之类的库的 Perhps

于 2010-05-26T21:02:14.033 回答
2

从 pcap 文件中重构 http 内容的最佳工具是justniffer。它使用 linux 内核的 prtion 进行 IP 分片和 tcp 数据包重新排序。

于 2012-05-30T11:09:17.837 回答
2

要重建 pcap 文件中包含的数据,一个很棒的工具是 Xplico:http ://www.xplico.org

于 2011-05-09T17:36:55.217 回答
1

PCapPlusPlus包括一个示例控制台程序TCPReassembly,它嗅探流量并将每个流输出到单独的文本文件。在许多选项中,您可以指示要收听的流。

该文档还提到了一个具有更多选项的 linux 应用程序tcpflow 。

于 2019-09-30T16:12:33.320 回答