Bagaimana cara berbicara dengan server imap di shell melalui Openssl menggunakan kompresi imap?

Saya mengalami beberapa masalah dalam memahami rfc4978.
Berdasarkan pemahaman saya, semuanya dikompresi setelah server kembaliOKtermasuk nama perintah. Namun sepertinya saya salah memahami beberapa hal (karena[Gmail]/sfgstidak diganti namanya dan jelas file tidak terkirim).

 $ cat deflatecommands /dev/stdin | socat - OPENSSL:imap.googlemail.com:993,compress=none
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT APPENDLIMIT=35882577 LIST-EXTENDED LIST-STATUS
a001 OK [email protected] authenticated (Success)
a002 OK Success
2016/04/28 21:47:03 socat[16204.25769803872] E SSL_write(): Broken pipe

dengan perintah deflate berisi :

a001 LOGIN myus.tyer mypassord
a002 COMPRESS DEFLATE
xÚK400VrõsôuUPŠvÏMÌ̉Õ/NK/VBp+@‰— Ô)

yang tidak dikompresi memberikan:

a001 LOGIN myus.tyer mypassord
a002 COMPRESS DEFLATE
a003 RENAME "[Gmail]/sfgs" "[Gmail]/xxxxxxxxxxx"

Tentu sajadeflatecommandsusescrflline berakhir di bagian yang tidak terkompresi dan terkompresi. deflatecommandsdibuat dengan :

$ openssl zlib a003 > a003.zlib
$ cat a001 a002 a003.zlib > defaltecommands

person user2284570    schedule 28.04.2016    source sumber
comment
Hal terakhir karena kecepatan koneksi saya, tidak ada yang terkirim sebeluma002 OK Successjika tercetak di layar.   -  person user2284570    schedule 28.04.2016
comment
Saya tidak yakin itu akan berhasil. Ketiga perintah akan dikirim dalam satu paket, tetapi server kemungkinan akan menghapus buffer input saat mengaktifkan kompresi. Anda mungkin memerlukan jeda antara kompres dan perintah kompresi. Selain itu, jika ada CRLF di bagian yang dikompres, itu akan menjadi masalah juga. Anda harus mengedit file dalam mode biner dan memastikan tidak ada CRLF teks yang jelas.   -  person Max    schedule 29.04.2016
comment
@Max : Tidak ada ᴄʀʟꜰ dia003.zlib. Dan sekali lagi, tidak ada byte terkompresi yang dikirim sebelum GImap dikembalikanOK Success.   -  person user2284570    schedule 30.04.2016
comment
Jika Anda hanya memancing mereka masuk, mereka akan keluar sebelum tanggapan apa pun diterima. Jika tidak, perbarui pertanyaan Anda dengan apa yang Anda lakukan :)   -  person Max    schedule 30.04.2016
comment
@Max : Oke, sekarang saya menggunakan skrip satu liner, lakukan penundaan antara perintah cat (saat pipa baja). Tapi itu akan menambah terlalu banyak kebingungan pada pertanyaan saya (dan tentu saja pada kenyataannya saya ingin mengirim banyak data yang memerlukan kompresi yang berarti bukan hanya perintah ganti nama). Intinya server tetap menutup koneksi segera setelah menerima byte pertama yang dikompresi denganopenssl zlib.   -  person user2284570    schedule 30.04.2016


Jawaban (1)


Mengapa Anda perlu berbicara IMAP dari shell? Meskipun saya memuji pilihan Anda untuk pipeline berat yang memang didukung IMAP, ada batasan untuk perintah pipeline yang diizinkan. LOGIN secara teori aman, tetapi saya pribadi tidak akan memasukkan apa pun segera setelahnya tanpa menunggu hasilnya (dan ini adalah saat di mana pipa shell naif Anda akan mencapai batasnya). COMPRESS DEFLATE tidak aman untuk disalurkan dengan cara apa pun karena server harus mengaktifkan kompresi transparan. Dalam banyak bahasa, hal ini biasanya melibatkan penghapusan buffer jaringan pada berbagai lapisan.

Mengapa Anda memperumit masalah ini dengan aktivasi ekstensi COMPRESS? Ini sama sekali tidak diperlukan, dan itu tidak akan menghemat jumlah byte yang dapat diukur dalam skenario khusus ini.

person Jan Kundrát    schedule 30.04.2016
comment
It is by no means necessary, and it won't really save you any measurable amount of bytes in this particular scenario. Itu salah! Saya berencana mengirim sesuatu yang berukuran Gb tetapi menghasilkan 50Mb setelah dikompresi. Ini terlalu besar untuk dilakukan melalui klien email tradisional dan akan memakan terlalu banyak waktu pada koneksi internet (kecepatan unggah) 243Kb/s jika tidak dikompresi. Tolong jangan berasumsi saya mencoba menyelesaikan masalah yang salah. stackoverflow.com/q/14959461/2284570 (dan sebenarnya saya sekarang menggunakan skrip shell kecil untuk menunggu server tanggapan sebelum melanjutkan). - person user2284570; 30.04.2016
comment
Semoga berhasil mencoba menyimpan sesuatu yang berukuran GB ke GMail. Bagaimanapun, Anda memilih untuk menggunakan skrip shell, Anda harus mengatasi rasa sakit yang ditimbulkan. - person Jan Kundrát; 13.05.2016