当前位置:  技术问答>linux和unix

如何提取http数据包里面被压缩的gzip内容

    来源: 互联网  发布时间:2016-05-05

    本文导语:  抓取了http数据包,想提取里面的http网页的title,发现有的数据包里面的字段是被压缩成为了gzip格式的数据,当然我已经得到了这部分数据,但是问题是我改如何解压呢?搜了半天,发现对这个问题关注的人还真不少...

抓取了http数据包,想提取里面的http网页的title,发现有的数据包里面的字段是被压缩成为了gzip格式的数据,当然我已经得到了这部分数据,但是问题是我改如何解压呢?搜了半天,发现对这个问题关注的人还真不少,但是都没有一个提取完全的解决方案。
关键点说明:
1 这是抓取数据获取内容,而不是作为客服端发送请求到服务器端得到数据
2 难点是有没有gzip库函数供我直接调用,要求是可以在内存中对gzip数据进行直接的解压,而不是保存为gzip文件,然后再解压
3 正在参考wireshark的源代码,里面有关于gzip解压的相关代码,需要一点时间。
持续研究中,直到完全解决
希望得到大家的帮助,谢谢!

|
有现成的gzip库叫 zlib。
可以使用接口:
gzFile gzdopen (int fd, const char *mode);//由文件描述符打开文件

char * gzgets (gzFile file, char *buf, int len);

索性全贴了吧,可能还有人需要,也可以直接G00GLE:zlib 1.1.4 手册
----------------------------------------------

-----------------实用函数

------压缩与解压-------
int compress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
int compress2 (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level);
int uncompress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);

------压缩文件的读写----


typedef voidp gzFile;
gzFile gzopen (const char *path, const char *mode);//由路径打开文件

gzFile gzdopen (int fd, const char *mode);//由文件描述符打开文件

int gzsetparams (gzFile file, int level, int strategy);//设置压缩参数

int gzread (gzFile file, voidp buf, unsigned len);//从 file 中读取长度为len *4 个字节到buf

int gzwrite (gzFile file, const voidp buf, unsigned len); //从buf中取len *4 个字节写到文件 file.

int VA gzprintf (gzFile file, const char *format, ...);//由压缩文件描述符直接输出文件内容,格式化输出到file。

int gzputs (gzFile file, const char *s);//由压缩文件描述符中读取串,并输出到file。

char * gzgets (gzFile file, char *buf, int len);

int gzputc (gzFile file, int c);

int gzgetc (gzFile file);

int gzflush (gzFile file, int flush);

z_off_t gzseek (gzFile file, z_off_t offset, int whence);

z_off_t gztell (gzFile file);

int gzrewind (gzFile file);

int gzeof (gzFile file);

int gzclose (gzFile file);

const char * gzerror (gzFile file, int *errnum);
 
--------基本函数:

const char * zlibVersion (void);

int deflateInit (z_streamp strm, int level);

int deflate (z_streamp strm, int flush);

int deflateEnd (z_streamp strm);

int inflateInit (z_streamp strm);

int inflate (z_streamp strm, int flush);

int inflateEnd (z_streamp strm);
 
---------高级函数:

int deflateInit2 (z_streamp strm,

int deflateSetDictionary (z_streamp strm, const Bytef *dictionary, uInt dictLength);

int deflateCopy (z_streamp dest, z_streamp source);

int deflateReset (z_streamp strm);

int deflateParams (z_streamp strm, int level, int strategy);

int inflateInit2 (z_streamp strm, int windowBits);

int inflateSetDictionary (z_streamp strm, const Bytef *dictionary, uInt dictLength);

int inflateSync (z_streamp strm);

int inflateReset (z_streamp strm);
 
--------校验函数
uLong adler32 (uLong adler, const Bytef *buf, uInt len);

uLong crc32 (uLong crc, const Bytef *buf, uInt len);

|
有直接读 压缩 文件的 函数...

|
http://www.codeguru.com/Cpp/Cpp/algorithms/compression/article.php/c5125/  
直接在内存中解压

|
gzip提供源代码,分析它的应该比wireshark要有效,而且可以直接把头和库文件拿过来进行调用。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 谁有空帮我写写提取字符串中提取目录??
  • !!请各位大牛帮忙了,在linux下提取系统时间的话,用什么方法能提取到比毫秒更精确的时间呢?
  • 正则表达式提取图片路径 并过滤掉指定字符的写法
  • 字幕提取工具 ccextractor
  • Linux shell awk提取数据
  • 智能数据提取工具 Jailer
  • 怎样提取框架网页中<textarea></textarea>中的大量数据?
  • email提取工具 libextractemail
  • sql语句提取括号中文字的例子
  • 提取字体的点阵字模 WordMake
  • 提取.pdf文档中的一段字符的解决办法
  • 图像特征提取 cvBlob
  • SWF资源提取工具 SWFRIP
  • Node.js 图片主题色提取包 ThmclrX
  • 如何用sed命令从文件中提取与给定字符串的行?
  • c/c++ iis7站长之家
  • 关于提取前若干条记录的问题。
  • 如何实现对网络协议栈(TCP/IP)各层数据的提取?!
  • 紧急求助:怎么把数据库里面的时间字段提取出来后与当前时间比较。。。。。。。。。。。
  • 求shell,关于根据字符串提取不规则log日志


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3