2017-03-02 15 views
1

deflate 메소드를 사용하여 압축 된 imap 메시지의 압축을 푸는 중에 문제가 있습니다. 지금까지 시도한 것들은 IMAP 대화 (wireshark의 follow tcp 기능 사용) 중 하나의 방향을 분리하고 메시지 데이터를 압축되지 않은 메시지 부분 만 포함 된 원시 형식으로 저장하는 작업이었습니다. 그런 다음 tinf (1, 3 번째 예) 및 miniz (tgunzip 예)와 같은 프로그램을 발견하고 그 파일을 부풀려 시도했지만 성공하지는 못했습니다. 내가 누락 된 항목이 있습니까? 미리 감사드립니다.IMAP로 압축 된 메시지의 압축을 해제합니다.

tinf - http://www.ibsensoftware.com/download.html Miniz - 원시 데이터 https://code.google.com/archive/p/miniz/source/default/source

+0

IMAP는 메시지뿐만 아니라 전체 스트림을 압축하므로 컨텍스트에서 메시지를 잘라낼 수 없습니다. 메시지는 이전 바이트에 따라 다릅니다. CRLF 다음에 COMPRESS DEFLATE 명령으로 서버가 OK라고하는 곳부터 시작하여 압축을 풀어야합니다. Tinf는 압축 해제해야하는 것처럼 보입니다. * 잘라내어 붙여 넣기 만하면됩니다. – arnt

+0

불행히도 작동하지 않습니다. 여전히 inflate() 상태 -3로 실패했습니다. – veliki

+0

잘라 내기 및 붙여 넣기를 유의하십시오. – arnt

답변

0

시도 배관 : 중요한 부분은 애들러 검사없이 원시 하나에 예상되는 형식을 변경하는 -WindowBits => -15

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

입니다.

(이는 dovecot 소스에서 파생되었으며 Thunderbird에서 Gmail 네트워크 캡처에 유용합니다).

IMAP 압축 (강조 광산) 지정 RFC4978 가입일

:

Zlib의 라이브러리 (RFC1951 참조) 기능 deflateInit2())) (inflateInit2을 (수축 및 팽창()를 사용 이 확장을 구현하려면 이면 충분합니다. windowBits 값은 -8 ~ -15 범위에 있어야합니다. 그렇지 않으면 deflateInit2()가 잘못된 형식을 사용합니다. deflateParams()는 압축률을 향상시키고 리소스 을 사용할 수 있습니다. deflate()에 대한 Z_FULL_FLUSH 인수는 사전을 지우는 데 사용될 수 있습니다 (수신 피어는 아무 것도 할 필요가 없습니다).