【毕业设计日记-4月】gzip格式解压

之前很困惑的一个问题,这两天也倒腾出来了,就是wireshark分析出来的这个

↑  ①Frame   ↑②De-chunked entity body  ↑③Uncompressed entity body

这三部分的关系是啥?

网上也找不到,还是请教了师兄师姐,才知道①是报文的所有内容,②是①中HTTP报文后面压缩的内容,③就是这部分压缩内容解压后的内容,也就是msgContent等等等这些需要的内容,所以我现在要做的就是截获报文之后对这部分内容进行解压(然后再提取msgContent的内容进行解密,这个之前已经做过了,只是需要整合一下了)。

1F 8B 表示采用gzip压缩格式。

在网上找了一个解压的程序,在VS里跑了一下报错,稍微修改了一下,然后提示

然后在网上看了一下,要自己去编译生成这个lib文件

于是找到这个sln文件,打开,选中zlibstat.lib,重新生成解决方案,会在/x86/ZlibStatDebug文件目录下找到生成的zlibstat.lib库文件,然后按以下步骤:

1. 包含头文件

属性--C/C++--常规--附加包含目录(添加包含.h文件的目录,也就是C:/zlib-1.2.8)

2. 定义宏

属性--C/C++--预处理器--预处理器定义:添加 ZLIB_WINAPI;ASMV;ASMINF

3. 项目包含.lib文件所在的目录:

属性--链接器--常规--附加库目录(添加C:/zlib-1.2.8/contirb/vstudio/vc10/x86/ZlibStatDebug)

4. 项目包含.lib文件

属性--链接器--输入--附加依赖项(zlibstat.lib

5. 项目代码中 #include "zlib.h"

程序就可以正常运行啦

下一步就是把这些一步步整合起来,放在一个程序里。

附上解压使用的测试程序:

 1 // gzip1.cpp : 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5
 6
 7 #ifndef GZIP_H
 8 #define GZIP_H
 9
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include "zlib.h"
13
14 /* Uncompress gzip data */
15 /* zdata 原数据 nzdata 原数据长度 data 解压后数据 ndata 解压后长度 */
16 int gzdecompress(Bytef *zdata, uLong nzdata,
17     Bytef *data, uLong ndata)
18 {
19     int err = 0;
20     z_stream d_stream = { 0 }; /* decompression stream */
21     static char dummy_head[2] = {
22         0x8 + 0x7 * 0x10,
23         (((0x8 + 0x7 * 0x10) * 0x100 + 30) / 31 * 31) & 0xFF,
24     };
25     d_stream.zalloc = NULL;
26     d_stream.zfree = NULL;
27     d_stream.opaque = NULL;
28     d_stream.next_in = zdata;
29     d_stream.avail_in = 0;
30     d_stream.next_out = data;
31     //只有设置为MAX_WBITS + 16才能在解压带header和trailer的文本
32     if (inflateInit2(&d_stream, MAX_WBITS + 16) != Z_OK) return -1;
33     //if(inflateInit2(&d_stream, 47) != Z_OK) return -1;
34     while (d_stream.total_out < ndata && d_stream.total_in < nzdata) {
35         d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */
36         if ((err = inflate(&d_stream, Z_NO_FLUSH)) == Z_STREAM_END) break;
37         if (err != Z_OK) {
38             if (err == Z_DATA_ERROR) {
39                 d_stream.next_in = (Bytef*)dummy_head;
40                 d_stream.avail_in = sizeof(dummy_head);
41                 if ((err = inflate(&d_stream, Z_NO_FLUSH)) != Z_OK) {
42                     return -1;
43                 }
44             }
45             else return -1;
46         }
47     }
48     if (inflateEnd(&d_stream) != Z_OK) return -1;
49     ndata = d_stream.total_out;
50     51 }
52
53 int main()
54 {
55     int i;
56     Bytef src[200] = {
57         0x1F, 0x8B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x55, 0x8E, 0x41, 0x0A,
58         0xC2, 0x30, 0x14, 0x44, 0xEF, 0xF2, 0xD7, 0x59, 0xFC, 0xB4, 0x49, 0x9B, 0x66, 0xDB, 0x95, 0x3B,
59         0x17, 0x5E, 0x20, 0x34, 0xB1, 0x76, 0xD1, 0xA4, 0x34, 0x41, 0x90, 0xD2, 0xBD, 0x08, 0x82, 0xE0,
60         0x56, 0xF0, 0x24, 0xDE, 0x46, 0x7B, 0x0E, 0xD3, 0x0A, 0x05, 0x77, 0x9F, 0xF9, 0x33, 0xF3, 0x66,
61         0x80, 0xCA, 0x69, 0x03, 0x12, 0x09, 0xB4, 0xC6, 0x7B, 0x55, 0xC7, 0x1B, 0xA6, 0xFB, 0xF5, 0xFD,
62         0x7A, 0x4C, 0xE7, 0xDB, 0xE7, 0xF2, 0x04, 0x02, 0x5A, 0x05, 0x05, 0x72, 0x80, 0xD0, 0x74, 0x7E,
63         0x77, 0xEA, 0xFE, 0xDC, 0x1B, 0xBB, 0x77, 0xF3, 0xCF, 0x1B, 0xAB, 0x4D, 0x0F, 0x32, 0xA1, 0x98,
64         0x32, 0xC1, 0x08, 0xF4, 0xA6, 0x32, 0xCD, 0x71, 0x96, 0x68, 0x91, 0x30, 0x14, 0x09, 0x89, 0xF9,
65         0x36, 0x66, 0x29, 0xCB, 0x30, 0xC7, 0x0C, 0x19, 0x52, 0x5E, 0xC4, 0x1E, 0x5F, 0x97, 0xCE, 0x06,
66         0x63, 0x43, 0x04, 0x73, 0x5E, 0x60, 0x04, 0x86, 0x15, 0xE2, 0xEB, 0x8D, 0x06, 0xC9, 0x05, 0x4D,
67         0x45, 0x9E, 0xA5, 0x64, 0xC1, 0xAC, 0x13, 0x1A, 0x5F, 0xAA, 0xD6, 0xF4, 0x6A, 0x7B, 0x70, 0xC1,
68         0x2D, 0xCA, 0x8F, 0x37, 0x8E, 0xE3, 0x17, 0x6D, 0x19, 0x7E, 0x8C, 0xD7, 0x00, 0x00, 0x00 };
69
70     Bytef dst[300] = { 0 };
71     gzdecompress(src, 200, dst, 300);
72     for (i = 0; i<300; i++)
73         printf("%c", dst[i]);
74     system("pause");
75     return 0;
76 }
77
78
79 #endif // GZIP_H

参考链接:
使用zlib实现gzip格式数据的压缩和解压 (这个代码有一丢丢错误,上面代码已经修改了)

Windows下zlib库和libPng库的编译和使用  (看第二步 “使用zlib静态库:zlibstat.h”  即可)

时间: 2024-10-13 01:04:06

【毕业设计日记-4月】gzip格式解压的相关文章

linux下,gzip的解压与压缩

部分http响应报文采取gzip格式压缩,需要解压后数据才有效. http://www.zlib.net/ 提供了解压gzip的库函数 例子非常详细,http://www.zlib.net/zlib_how.html 系统版本:Ubuntu 14.04 安装库:apg-get install zlib1g-dev 编译时制定:gcc XXX -lz 添加头文件:#include <zlib.h> 特别需要注意: example中的 ret = inflateInit(&strm); 是

将数据按照gzip当时解压的工具类

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel;

【毕业设计日记-4月】mark小尝成果

千辛万苦,终于可以把消息提出来了!!! 对之后的工作提几点: 1.加上图形界面(虽然没什么好用图形界面的但是还是好看一点) 2.过滤器还需要优化,例如发送比较长的消息的时候不能简单设置 less 1500 3.偶尔出现程序崩溃情况,还不知道原因 4.中文还不能在控制台显示,只能显示英文和其他字符 粗糙代码如下: 1 #ifdef _MSC_VER 2 /* 3 * we do not want the warnings about the old deprecated and unsecure

xz格式解压

1.安装xz命令 yum install xz -y 2.将xz文件解压为tar文件 xz -d example.tar.xz 3.将tar文件解压 tar xf example.tar 如果无法安装xz命令,先安装epel源. yum install epel-release -y 原文地址:https://www.cnblogs.com/kylingx/p/11696344.html

【毕业设计日记-4月】已经破解密文

今天进度比较快. 上午对着书用wireshark找上次抓过的包,分析信息,我之前一直以为传递的数据信息会在 这个请求报文里,没想到其实在响应报文里. 看到这些熟悉的标识符就知道找对了,因为源程序中最后发送出去的内容也是msgContent,这两个密文也符合之前的明文"hi" "hey man"(字符串长度差,第一个字符一样). 今天主要最困惑的是之前这个函数 不知道他的用处到底是什么,之前还猜想是对汉字这种特殊编码进行转换.今天请教了实验室一个学长,他说这个就是把字

【毕业设计日记-4月】WINCAP程序框架

今天又看了一下WINCAP技术文档的第七篇——处理脱机堆文件.把其中两个程序综合了一下,再使用前面讲到的filter,自己捣鼓出来了一个程序的基本框架. 目前我这个做得还很基本,可以抓到相应的数据包,但仍存在两个问题: 1.只能人工设定先捕获多少个数据包到堆文件,再从中一个个读取 2.我抓的包(如下右)只有HTTP包的内容,没有json的内容,我不懂json和HTTP数据包到底是什么关系,json的内容并没有接在HTTP报文后面 问题2比较关键,亟待解决.问题1的话算是一个提升,现在设想是开两个

【毕业设计日记-4月】pcap编程之分析数据包

昨天看到了最重要的一部分,分析数据包. 这个分析UDP的程序基本上前面都能看得懂,主要还是对报文的分析这一部分. 在blog里找到的图,对于这个过程,反过来也就是:应用层数据,封装成UDP或者TCP报文,再加上IP首部,然后再加上以太网首部,就成为了可以在链路层传播的数据帧. 以太网驱动程序首先根据以太网首部中的"上层协议"字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP.ARP 还是RARP 协议的数据报,然后交给相应的协议处理.假如是IP 数据报

java关于压缩包的处理,我这里贴出三中格式的(zip,rar,tar)解压方法(目前只用到解压,所以压缩过多研究)。

1.首先我们先来说下为什么会有这三中格式: (1)rar格式:rar格式是最先出现的压缩方式,它主要是用于商业机构一些文件的压缩,它可以根据不同公司的要求,去设定制定不同的压缩算法,这种算法是不对外公开的,安全性比较高,但他是收费的. (2)zip格式:因为rar格式收费,必然会诞生一些免费的压缩格式,那么zip就是在这样的情况下诞生的.同样压缩算法也是公开的,不收取任何费用,效果当然也比rar格式稍差. (3)tar格式:tar是国产推出的一种免费的压缩格式. 2.java编程实现rar,zi

(笔记)Linux下的解压、压缩命令集合

01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩!) 02-.gz格式解压1:[*******]$ gunzip FileName.gz解压2:[*******]$ gzip -d FileName.gz压 缩:[*******]$ gzip FileName 03-.tar.gz格式解压:[*******]$ tar zxvf FileName.