2017-02-01 19 views
0

У меня есть файл Gzip, который имеет несколько блоков blocks.Every начинается сРаспаковка GZIP файл, который Contine несколько блоков

1F 8B 08 

И заканчивается

00 00 FF FF 

Я пытался распаковать файл, используя 7- Zip и gzip в linux, но я всегда получаю сообщение о том, что файл недействителен. Так что я написал этот питон скрипт

import zlib 
CHUNKSIZE=1 

f=open("file.gz","rb") 
buffer=f.read(CHUNKSIZE) 

data="" 
r=CHUNKSIZE 
d = zlib.decompressobj(16+zlib.MAX_WBITS) 
while buffer: 
    outstr = d.decompress(buffer) 
    print(r) 
    buffer=f.read(CHUNKSIZE) 
    r=r+CHUNKSIZE 

outstr = d.flush() 

У меня есть уведомление, что, когда он дойдет до заголовка второго блока

00 00 00 FF FF 1F 8B 08 

в точке между FF и 1F возвращения скрипт

zlib.error: Error -3 while decompressing data: invalid block type

Я сделал размер куска равным 1, чтобы я точно знал, где проблема. Я знаю, что проблема не в файле, потому что у меня есть несколько файлов, построенных одинаково, и они показывают точно такую ​​же ошибку.

ответ

0

I know that the problem is not in the file because I have multiple files constructed the same way and they show exactly the same error.

Вывод не, что проблема не в файле, а то, что проблема заключается в все ваших файлов. Кто-то либо непреднамеренно, либо намеренно сконструировал недопустимые файлы gzip. Похоже, они сделали это, используя Z_SYNC_FLUSH или Z_FULL_FLUSH вместо Z_FINISH, чтобы закончить каждый поток, прежде чем запускать другой поток фальшивых gzip. Поток gzip заканчивается последним блоком, за которым следует восьмибайтовый gzip-трейлер, содержащий два контрольных значения для целостности несжатых данных.

, тем не менее Вы можете продолжить декомпрессию, хотя и без комфорта любой проверки целостности данных, просто подбирая с новым экземпляром decompressobj, когда вы получите сообщение об ошибке и увидеть новый заголовок GZIP, 1f 8b 08.

Что еще более важно, вы должны найти и связаться с источником этих файлов и сказать: «Эй, WTF?»