首页 > Python > GZip magic标志0x8B1F

GZip magic标志0x8B1F

曾遇到过一个特殊的文件,格式未知,就特地搜索了一下文件前面的两个字节,是0x8B1F(就是通常所说的magic number了),猜测极有可能是GZip了,不过解压的时候CRC校验失败了。

GZip常用于服务器像浏览器传送数据时进行数据压缩处理,类似的技术还有Defalte,小站就采用了这样的技术,加快页面的响应请求。在发送GET请求时,如果指明支持GZip或Deflate,如“Accept-Encoding:gzip, deflate”,那么实际传送过来的数据就是经过了压缩处理的,如果是浏览器,一般会自己解压缩;如果是写程序的话就需要自己解压缩了,否则就是一堆乱码了。

简单python脚本解压缩GZip数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/python
# -*- coding:utf-8 -*-
 
import sys
import gzip
from StringIO import StringIO
 
if __name__ == "__main__":
    if len(sys.argv) != 3:
        print "Command line parameters error."
        print "Usage: UnGzip.py GzipFilePath ResFilePath"
        sys.exit(1)
 
    try:
        srcfile = open(sys.argv[1], "rb")
        srcdata = srcfile.read()
        buf = StringIO(srcdata)
        f = gzip.GzipFile(fileobj = buf)
        resdata = f.read()
 
        resfile = open(sys.argv[2], "wb")
        resfile.write(resdata)
 
        srcfile.close()
        resfile.close()
    except:
        import traceback
        import sys
        import StringIO
        f = StringIO.StringIO()
        traceback.print_exc(file=f)
        print f.getvalue()
        sys.exit(1)

关于GZip格式的RFC文档:http://www.ietf.org/rfc/rfc1952.txt


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> GZip magic标志0x8B1F
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: Python 标签: , ,
  1. 2012年4月7日19:14 | #1

    不知道文件是什么格式的时候用TrID扫一下就好了

    [回复]

    代码疯子 回复:

    @JayXon, thanks 的确很不错。收藏了

    [回复]

  2. 博主,交个朋友
    2012年4月8日12:13 | #2

    请问博主对Windows内核编程有深入研究吗?我对Windows的内核运行机理以及系统底层安全攻防非常感兴趣。希望能和博主交个朋友。

    [回复]

    代码疯子 回复:

    @博主,交个朋友, 本人对Windows内核编程没有深入研究,不过同样对Windows的内核运行机理以及系统底层安全攻防非常感兴趣,很乐意与你交朋友。

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.