2017-03-02 20 views
1

deflateメソッドを使用して圧縮されたimapメッセージを解凍しようとする際に問題があります。私が今まで試したことは、IMAPの会話の1つを(wiresharkのfollow tcp関数を使用して)隔離し、メッセージデータを圧縮されたメッセージ部分だけが入っていることを期待する生の形式で保存することでした。私はtinf(1番目と3番目の例)とminiz(tgunzipの例)のようないくつかのプログラムを見つけ、そのファイルを膨らませようとしましたが、それは成功しませんでした。 何か不足していますか?前もって感謝します。IMAPの圧縮されたメッセージを解凍する

TINF - http://www.ibsensoftware.com/download.html ミニッツレーサー - 生データhttps://code.google.com/archive/p/miniz/source/default/source

+0

IMAPは、メッセージだけでなくストリーム全体を圧縮するので、メッセージをそのコンテキストから切り捨てることはできません。メッセージは、以前のバイトに依存します。あなたは、CRLFの後に、サーバーがOKと言う場所からCOMPRESS DEFLATEコマンドまでを収縮させなければなりません。ティンフは、それを解凍する必要があるように見えます。 – arnt

+0

不運にもうまくいきません。それでもステータスが-3のinflate()が失敗しました。 – veliki

+0

カットアンドペーストを心配してください。 – arnt

答えて

0

てみ配管に:

perl -MCompress::Zlib -pe 'BEGIN{$i = inflateInit(-WindowBits => -15)} 
          $_=$i->inflate($_)' 

重要な部分は、アドラーのチェックサムなしで生一つに予想される形式を変更する-WindowBits => -15です。

(これは、dovecotソースから派生したもので、Thunderbirdでgmailネットワークキャプチャに役立ちます)。 IMAP圧縮(強調鉱山)を指定RFC4978から

機能 のdeflateInit2()、(RFC1951を参照)zlibライブラリを使用する場合は、(収縮)、inflateInit2()、および膨張します()この拡張を実装するには で十分です。 windowBitsの値は、 -8〜-15の範囲でなければなりません。そうでない場合、deflateInit2()は間違った形式のを使用します。 deflateParams()を使用して圧縮率を向上させ、リソース を使用できます。 deflate()へのZ_FULL_FLUSH引数は、 ディクショナリをクリアするために使用できます(受信ピアは何もする必要はありません)。

関連する問題