我试图通过libpcap嗅探HTTP数据,并在处理TCP有效负载后获取所有http内容(header + payload)。
根据我在Writing an http sniffer (or any other application level sniffer)的讨论,由于碎片问题,我面临着问题 - 我需要重建整个流(或对其进行碎片整理)以获得完整的HTTP数据包,这是我需要帮助的地方。
感谢期待!!
答案 0 :(得分:9)
这真的很简单。只需从pcap获取以太网帧并从中提取IP数据包,重新组合任何碎片。然后,根据序列号重新排序IP数据包中的TCP段,注意您丢弃任何重复数据。然后,将流处理为HTTP流。当然,HTTP不包含在数据包中;它是一个应用层协议,但我相信一旦你完成了所有这些其他工作,这将是显而易见的。在执行所有这些操作时要注意校验IP标头和TCP段,以确保您的数据正确无误。此外,如果pcap碰巧丢失了任何数据包,请确保妥善处理。
为帮助您Linux TCP stack,应该在内核中提供对此过程的简明参考。
答案 1 :(得分:5)
您可以使用tcptrace重新组合pcap文件,而不是重新组合您自己的流。我相信-e
会这样做。
一旦将应用程序层数据整合在一起,就可以应用简单的HTTP头解析....来自库http://github.com/ry/http-parser
的Perhps答案 2 :(得分:2)
要重建pcap文件中包含的数据,一个很棒的工具是Xplico:http://www.xplico.org
答案 3 :(得分:2)
从pcap文件重新构建http内容的最佳工具是justniffer。它使用prtion的linux内核进行IP分片和tcp数据包重新定位。
答案 4 :(得分:0)
PCapPlusPlus包括示例控制台程序TCPReassembly,该程序嗅探流量并将每个流输出到单独的文本文件。您可以在许多选项中指示要收听的流。
文档中还提到了带有更多选项的Linux应用tcpflow。