【问题标题】:uncompress gzipped HTTP message解压缩 gzip 后的 HTTP 消息
【发布时间】:2010-01-25 15:19:43
【问题描述】:

我正在使用 C 分析 Pcap 捕获,我需要解压缩 HTTP 的 Gzipped 正文 回复。 我知道我可以手动使用 Wireshark 来做到这一点,但我需要在我的程序中即时完成。

我的理解是我应该研究 zlib 和 RFC。但既然是一个小分析程序,你知道我在哪里可以找到快速的解决方案吗?

谢谢

【问题讨论】:

    标签: c http gzip pcap


    【解决方案1】:

    听起来您不需要从您已经知道的内容中阅读任何其他 RFC。您无需了解压缩算法即可使用它。

    使用 zlib 非常简单。
    您可以在几行代码内做到这一点:Here is an example

    【讨论】:

    • 感谢您的回复。我已经尝试过您指向我的 Zlib 示例代码,它称为 Zpipe。这是一个简单的程序,它从标准输入获取压缩流并生成未压缩流。但是,示例程序无法解码 gzip 压缩页面,抱怨数据格式无效。压缩页面总是以字节 1F8b(压缩文件的幻数)开头。如果你得到流,将它复制粘贴到一个文件中并要求 gzip(程序)解压缩它,它没有问题。但是,Zpipe 还是会报错,不会解压。
    【解决方案2】:

    很可能,无论您使用哪种语言构建分析程序,都应该有一个库已经准备好用于解码 gzip 压缩流。 Google 或 Bing 用于“your-language-of-choice gzip implementation”或类似的东西,您可能会得到解决问题的方法。

    作为最后的手段,您可能总是让您的程序使用GNU gzip(必须为您选择的系统构建一个版本),方法是向它提供数据并使用 gzip 的解压缩输出进行处理。

    【讨论】:

      【解决方案3】:

      解决了!我在 gzip 上找到了一个名为 minigzip 的实现。这是一个很好的程序,我将用作参考实现。

      【讨论】:

        【解决方案4】:

        通过将 Accept-Encoding 客户端标头重写为 Accept-Encoding 的代理运行它不是更简单吗:compress;q=0, gzip;q=0

        ?

        C.

        【讨论】:

        • 这是不可能的,因为我只能访问 pcaps。不过问题解决了。只需要 10 行代码和在 zlib 中调用 gzuncompress ;)
        猜你喜欢
        • 1970-01-01
        • 2012-02-12
        • 2012-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-06
        相关资源
        最近更新 更多