介绍gzip格式,识别gzip压缩的数据流量。

在协议分析过程中,经常会发现gzip压缩的数据,例如在HTTP协议中,在HTTP头中会标示,内容编码为gzip、DEFLATE。

但是,还有很多情况,例如一些非HTTP协议,特别是私有协议中,数据同样采用gzip压缩,但是,流量中并未写明数据是gzip压缩格式,这就给分析带来了困难。

如何解决这个困难呢?只能从数据本身着手了,需要了解gzip压缩后数据的特征和标记,以确定哪些数据是gzip压缩。

gzip的基础是DEFLATE,它其实是多种压缩文件格式的简称。在RFC1952中对gzip格式进行了定义。

对gzip格式的数据,通常使用zlib库就可以解压缩。

gzip压缩格式的数据的识别,依靠的是gzip格式内的一些特征,gzip格式如下图:

具体如下:

10字节的头,包含幻数、版本号以及时间戳,对应ID1、ID2、CM、FLG、MTIME、XFL、OS;

可选的扩展头extra  data ,如原文件名;

文件体compressed blocks,包括DEFLATE压缩的数据;

8字节的尾注,包括CRC-32校验和CRC32以及未压缩的原始数据长度ISIZE。

在文件头中,ID1和ID2分别为固定值0x1F,0x8B;而CM则定义了压缩使用的算法,目前仅一种,即DEFLATE压缩,对应值为0x08;FLG、MTIME、XFL、OS分别为标记、时间、可选扩展头标记、操作系统标记。

对gzip格式的识别,依靠的就是gzip的起始3字节,因为这三个字节目前是固定的,只有我们在数据流中,发现了1F 8B 08,则表示找到了gzip编码数据的起始了,继续分析就简单了。

如果想找个gzip的示例文件,那就到gzip官网去下载吧:

http://alpha.gnu.org/gnu/gzip/

目录下的压缩包都是gzip压缩格式。

根据各种类型的数据标记,来确定待分析的未知数据流中的数据格式,是一项很有用的技能,希望大家能多锻炼,多掌握,很多数据格式的标记,都可以在网络中找到,有人已经总结好了。

长按进行关注。

gzip格式分析与识别的更多相关文章

  1. HTTP POST请求报文格式分析与Java实现文件上传

    时间 2014-12-11 12:41:43  CSDN博客 原文  http://blog.csdn.net/bboyfeiyu/article/details/41863951 主题 HTTPHt ...

  2. 常见压缩格式分析,及 Linux 下的压缩相关指令

    可先浏览加粗部分 一.常见压缩档 *.zip | zip 程式壓縮打包的檔案: (很常见,但是因为不包含文件名编码信息,跨平台可能会乱码) *.rar | winrar 程序压缩打包的档案:(在win ...

  3. Go语言之进阶篇请求报文格式分析

    1. 请求报文格式分析 示例: package main import ( "fmt" "net" ) func main() { //监听 listener, ...

  4. 如何优雅的爬取 gzip 格式的页面并保存在本地(java实现)

    1. 引言 在爬取汽车销量数据时需要爬取 html 保存在本地后再做分析,由于一些页面的 gzip 编码格式, 获取后要先解压缩,否则看到的是一片乱码.在网络上仔细搜索了下,终于在这里找到了一个优雅的 ...

  5. 网易云音乐ncm格式分析以及ncm与mp3格式转换

    目录 NCM格式分析 音频知识简介 两种可能 GitHub项目 格式分析 总体结构 密钥问题 代码分析 main函数 导入模块 dump函数 参考资料 代码完整版 转换工具 ncmdump ncmdu ...

  6. zlib压缩一个文件为gzip格式

    网上有很多针对zlib的总结,但是很零散,自己经过总结,实现了用zlib压缩一个文件为gzip格式,似的可以直接使用winr工具解压. 具体方法是使用zlib的deflate系列函数,将buffer压 ...

  7. JMeter学习(三十五)使用jmeter来发送json/gzip格式数据

    一.使用jmeter来发送gzip数据 有时候我们需要模拟在客户端将数据压缩后, 发送(post)到服务器端. 通常这种情况,会发生在移动终端上. 这样做的好处, 是可以节省流量.  当然, 服务器返 ...

  8. AAC 格式分析

    一直在做一个语音项目,到了测试阶段,近来不是很忙,想把之前做的内容整理一下. 关于AAC音频格式基本情况,可参考维基百科http://en.wikipedia.org/wiki/Advanced_Au ...

  9. AAC ADTS AAC LATM 格式分析

    http://blog.csdn.net/tx3344/article/details/7414543# 目录(?)[-] ADTS是个啥 ADTS内容及结构 将AAC打包成ADTS格式 1.ADTS ...

随机推荐

  1. 【C++常用函数】头文件<algorithm>中的常用函数(绝对值,交换,比较)

    swap(a,b) 用于交换a,b两个变量的值: max(a,b) 返回a,b中的最大值: min(a,b) 返回a,b中的最小值: abs(x) 返回x的绝对值,x必须是整数:

  2. .Net Core MVC理解新管道处理模型、中间件

    .Net Core中间件官网:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore ...

  3. docker tomcat8 mysql8部署常见错误

    出现docker: out of memory bug ,内存溢出 解决方法: free -mh 应该看一下内存 内存优化/买内存 出现java.util.zip.ZipException: erro ...

  4. flutter全栈开发学习资料大全 免费flutter学习视频 文字教程!

    flutter今年特别火,google推出flutter就是为了一次开发全平台应用,包括PC端,手机wap端,android,ios直接生成APP应用,如果真的能像谷歌说的,那我们开发人员就真的好好学 ...

  5. Android 组件化最佳实践 ARetrofit 原理

    本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/TXFt7ymgQXLJyBOJL8F6xg作者:朱壹飞 ARetrofit 是一款针对Android ...

  6. ABP入门教程4 - 初始化运行

    点这里进入ABP入门教程目录 编译解决方案 重新生成解决方案,确保生成成功. 连接数据库 打开JD.CRS.Web.Host / appsettings.json,修改数据库连接设置Connectio ...

  7. MySQL 事务提交 --不良好的事务习惯。

    MySQL 事务提交 --不良好的事务习惯 我们知道"事务"是数据库区别于文件系统的重要特性之一.MySQL的InnoDB引擎中的事务也完全符合ACID(原子性 一致性 隔离性 持 ...

  8. Angular回顾(1)

    一.前端基础 HTML:超文本标记语言,文档排版. DOM:文档对象模型. JS: 脚本语言,解释执行:动态操作DOM,服务器交互,用户交互. CSS:层叠样式表. 二.Angular前提 TypeS ...

  9. HbaseShell启动

    找到hbase目录 进入bin目录 ./hbase shell 成功

  10. windows下切换Python运行环境。

    1.首先确保你的系统里已经安装了Conda,打开命令行窗口,执行命令:conda --version 2.查看你的系统当前已有的Python环境,执行命令:conda info --envs,从图中我 ...