1
2
3 """GNU zip."""
4
5 import struct, zlib
6 import dpkt
7
8
9 GZIP_MAGIC = '\x1f\x8b'
10
11
12 GZIP_MSTORED = 0
13 GZIP_MCOMPRESS = 1
14 GZIP_MPACKED = 2
15 GZIP_MLZHED = 3
16 GZIP_MDEFLATE = 8
17
18
19 GZIP_FTEXT = 0x01
20 GZIP_FHCRC = 0x02
21 GZIP_FEXTRA = 0x04
22 GZIP_FNAME = 0x08
23 GZIP_FCOMMENT = 0x10
24 GZIP_FENCRYPT = 0x20
25 GZIP_FRESERVED = 0xC0
26
27
28 GZIP_OS_MSDOS = 0
29 GZIP_OS_AMIGA = 1
30 GZIP_OS_VMS = 2
31 GZIP_OS_UNIX = 3
32 GZIP_OS_VMCMS = 4
33 GZIP_OS_ATARI = 5
34 GZIP_OS_OS2 = 6
35 GZIP_OS_MACOS = 7
36 GZIP_OS_ZSYSTEM = 8
37 GZIP_OS_CPM = 9
38 GZIP_OS_TOPS20 = 10
39 GZIP_OS_WIN32 = 11
40 GZIP_OS_QDOS = 12
41 GZIP_OS_RISCOS = 13
42 GZIP_OS_UNKNOWN = 255
43
44 GZIP_FENCRYPT_LEN = 12
45
47 __hdr__ = (
48 ('id', '2s', ''),
49 ('len', 'H', 0)
50 )
51
52 -class Gzip(dpkt.Packet):
53 __hdr__ = (
54 ('magic', '2s', GZIP_MAGIC),
55 ('method', 'B', GZIP_MDEFLATE),
56 ('flags', 'B', 0),
57 ('mtime', 'I', 0),
58 ('xflags', 'B', 0),
59 ('os', 'B', GZIP_OS_UNIX),
60
61 ('extra', '0s', ''),
62 ('filename', '0s', ''),
63 ('comment', '0s', '')
64 )
65
84
102
104 """Compress self.data."""
105 c = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS,
106 zlib.DEF_MEM_LEVEL, 0)
107 self.data = c.compress(self.data)
108
110 """Return decompressed payload."""
111 d = zlib.decompressobj(-zlib.MAX_WBITS)
112 return d.decompress(self.data)
113
114 if __name__ == '__main__':
115 import sys
116 gz = Gzip(open(sys.argv[1]).read())
117 print `gz`, `gz.decompress()`
118