如何保存 http 响应的“块”?

如何保存 http 响应的“块”?

我想保存 http 响应的“块”,最好使用 curl 或其他可以在 mac 或 linux 上运行的免费命令行工具,但我愿意接受任何类型的解决方案。

例如,如果响应以 10 个块的形式发送,我想将每个块保存到单独的文件中,chunk1.txt->chunk10.txt

当然,如果文件以单个块的形式发送,那么该文件将被保存到单个文件中。

如何使用 curl 或其他工具保存 http 响应块?

编辑:我想“查看”这个来验证它Transfer-Encoding: chunked是否正在提供 1-N 个块,并且Content-Length:XXX正在发送单个响应。我想将它们保存到文件中是没有必要的。如果在单个文件中清楚地注明每个块是什么,那就太好了!

答案1

tcpdump是 Wireshark 和其他类似实用程序的基础,并且具有可以实现您想要的命令行界面。类似于以下命令:

tcpdump -A -i en0 src XXX.YYY.ZZZ.AAA and port 80

会将通过XXX.YYY.ZZZ.AAA端口的所有原始数据包转储到控制台。您可以消除任何接口的 ,并且表达式是相当可配置的。80en0-i en0

你可以找到一些很好的例子howtoing.com 网站danielmiessler.com

虽然您可以使用此解决方案保存整个捕获,但它不会按照您的要求将块保存在不同文件中。您必须对转储文件进行后处理才能获得它。

[澄清] 您将curl在捕获数据包的同时在单独的终端中运行。

[补充] 还有关于Wireshark 和 http 分块这可能会有用。还有这个重新组合 pcap 跟踪以恢复 http 级别数据问题有一个可接受的解决方案,使用重新解析捕获兄弟

答案2

您可以使用以下实用程序Wireshark,这通常是Linux上的标准包。

Wireshark 允许深入检查所有 TCP/IP 协议级别的消息和协议,并提供许多复杂的工具。

您可以使用 Wireshark 显示消息字节流或转到协议级别并显示更高级别的抽象。

您感兴趣的部分称为 数据包重组, 被形容为 :

网络协议经常需要传输大量完整的数据,例如传输文件时。底层协议可能无法处理该数据块大小(例如网络数据包大小的限制),或者像 TCP 一样基于流,它根本不了解数据块。

在这种情况下,网络协议必须自己处理块边界,并(如果需要)将数据分散到多个数据包中。显然,它还需要一种机制来确定接收端的块边界。

Wireshark 将此机制称为重组,尽管特定协议规范可能对此使用不同的术语(例如,取消分段、碎片整理等)。

重组可能发生在几个协议层,因此“数据包字节”窗格中可能会出现多个选项卡。

一旦您可以看到这些块,您也可以导出它们。

以下是带有重新组合选项卡的“数据包字节”窗格的示例:

图像

相关内容