我有一些来自本地接口的 pcap 数据,我想分析一下。具体来说,我想要 HTTP 会话的内容。我知道很多 HTTP标题统计工具,但我特别想重新组装内容每个完整的 HTTP 连接。
是否有任何合适的第 4 层数据包转储工具(用于 Linux),就像 tcpdump 等针对第 3 层的工作方式一样,可以理解和操纵 HTTP?
如果之前有人问过这个问题,请随时给我重定向,尽管我还没有在 SF 上找到任何答案。谢谢!
答案1
我认为这样tcpflow
就足以完成你的工作了,它可以获取一个 pcap 文件并将其分成其组成部分。例如,我刚刚进行了以下测试:
sudo tcpdump -i eth0 -n -s 0 -w /tmp/capt -v port 80
然后重新加载你的问题,停止tcpdump
,然后运行:
tcpflow -r /tmp/capt
并得到大约 20 个文件,每个文件包含一个 HTTP 请求或响应(视情况而定)。
另一方面,我通常只使用软选项,在 wireshark 中打开我的捕获文件,它的“分析 -> 跟踪 TCP 流”模式非常棒(颜色编码和一切)。
顺便说一下,这两种工具都可以自己进行数据包捕获——您不必通过 向它们提供现有的数据包捕获tcpdump
。
如果您在拆分 HTTP 流量后有特定需求来解析它,那么这很简单:HTTP 协议非常简单。在简单(非 keepalive/pipelined)情况下,您可以使用以下命令获取请求或响应标头:
sed '/^\r$/q' <connectionfile>
这是获取请求/响应的主体:
sed -n '/^\r$/,$p' <connectionfile>
(如果愿意的话,您也可以通过那些 sed 命令来传输内容)。
在保持活动连接上,您需要开始编写一些脚本,但即便如此,也需要大约 20 行脚本来处理两个文件(A 到 B,B 到 A),提取标题,读取 Content-Length,然后读取正文 - 如果您正在进行任何类型的自动处理,您都会编写代码来执行这些操作,因此一点 HTTP 解析不会增加工作量。