18 Marzo 2003
Corso di Laurea in Ingegneria Informatica
Corso di Laurea in Ingegneria delle Telecomunicazioni
Corso di Telematica A
17 Marzo 2004
A . L azza ri
1
Trasferimento di informazione
generica, oltre il plain-text
(uuencode, MIME)
2
uuencode, MIME
1
18 Marzo 2003
Inserimento di file binari in un messaggio
• SMTP parla in modalità NVT
– Caratteri leciti: ASCII
– Sequenze di controllo interpretate (es. CRLF)
• RFC 822/2822 ammette solo ASCII nelle linee di
testo (“Body”)
• Problema: Trasferire un flusso di ottetti generici
• Soluzione: trasformare una stringa generica in una
stringa ASCII “printable” (set G0)
• stringa ASCII: 8° bit = 0 (128 combinazioni possibili)
• Non tutte sono combinazioni lecite
3
uuencode: alterazione flusso di ottetti (byte)
FLUSSO ORIGINARIO
Byte 1
6 bit
byte 1
Byte 2
6 bit
byte 2
Byte 3
6 bit
byte 3
6 bit
byte 4
FLUSSO DERIVATO (ogni byte = 0 - 63)
4
uuencode, MIME
2
18 Marzo 2003
uuencode
• Tecnica per inserire file binari nel “ body” di un
messaggio e-mail
• Byte derivati = <6bit> (valore = 0 ÷ 63)
• Ogni byte derivato viene aumentato di 32 per
evitare i caratteri di controllo
• Si ottengono byte il cui valore è compreso 32 ÷ 95
(0x20 ÷ 0x5F)
• Il byte 32 (0x20) è poi convertito in 0x60 per evitare
il carattere non stampabile SP
• il flusso derivato aumenta di 4/3 (≅ 35%)
5
Caratteri ASCII stampabili
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0 1 2 3
SP 0
! 1
" 2
# 3
$ 4
% 5
& 6
' 7
( 8
) 9
* :
+ ;
, <
- =
. >
/ ?
4 5
@ P
A Q
B R
C S
D T
E U
F V
G W
H X
I Y
J Z
K [
L \
M ]
N ^
O _
6
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
7
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
6
uuencode, MIME
3
18 Marzo 2003
Organizzazione di un file “ uuencoded”
• Il file originario è suddiviso in linee di 45 byte
• Ogni linea produce una linea derivata di 45×3/4 = 60
caratteri
• Ogni linea è preceduta da un byte di lunghezza
(anch’esso aumentato di 32)
• M < .. 60 caratteri ... >
(M ha codifica ASCII 45+32=77)
• L’ultima linea è più corta (in genere)
• Il flusso di byte ottenuto è preceduto e chiuso da
informazioni di controllo
• Il risultato è un file di tipo plain-text leggibile e
modificabile con un text editor
7
Esempio di generazione di file “ uuencoded”
• File originario logo.zip, di 9940 byte
• 9940 = 3313 ×3 +1
• Flusso derivato: 3313 ×4 = 13252 +4
• Flusso derivato: 13200(220×60) + 52 + 4
• File costituito da:
• Preambolo
• 220 linee piene (“M”+ 60 caratteri)
• 1 linea breve (“H”+ 56 caratteri, non tutti utili)
• H =(¾52 + 1) + 32 = 40+32 =72 =0x48
• Postambolo
8
uuencode, MIME
4
18 Marzo 2003
File logo.zip “ uuencoded”
_=_
_=_ Part 001 of 001 of file logo.zip
_=_
begin 666 logo.zip
M4$L#!!0````(`()28BX7AN<U7B8``)HF```*````;&]G;U!2+FIP9Y6615`<
MT-:M&[?@%MP::32X$VB\"0Y!`TEP=PLN"6Y-X\'=W=TUN#LT$B"X2^#EWE?U
MZ@W^R?\-3M79>]5:9[`&YW7I=0N`!Y%3E`,@("``_LOK*D`:@(J,@HJ"C(J*
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
M/?HW>5W^/U!+`0(4`!0````(`()28BX7AN<U7B8``)HF```*````````````
H(`"V@0````!L;V=O4%(N:G!G4$L%!@`````!``$`.````(8F````````
`
end
9
MIME (titolo)
Multimedia Internet Mail
Extension (MIME)
10
uuencode, MIME
5
18 Marzo 2003
Limitazioni di “uuencode”
•
•
•
•
•
Tipico degli ambienti UNIX
Orientato a file binari (non testi con caratteri speciali)
Possibili problemi con caratteri nazionali
Possibili problemi con caratteri non “ mail safe”
Trasparente agli User Agent (UA), quindi richiede
interventi manuali degli utenti finali
• Tutti questi problemi superati da MIME
• Un messaggio MIME è un messaggio RFC2822
caratterizzato da appositi Header
• Gli UA che riconoscono MIME gestiscono il body del
messaggio in modo appropriato (codifica corretta,
separazione allegati, attivazione plug-in ecc.)
11
MIME: nuovi “ Header fields”
type
• "MIME version"
– MIME-Version: 1.0
subtype
• “Content-Type”
–
–
–
–
–
Content-Type:
Content-Type:
Content-Type:
Content-Type:
Content-Type:
text/plain; charset=US-ASCII
text/plain; charset=ISO-8859-1
image/...
application/...
Multipart/subtype; boundary=stringa
12
uuencode, MIME
6
18 Marzo 2003
MIME: codifica e trasporto
• Header field “ Content-Transfer-Encoding”
– Content-Transfer-Encoding: <mechanism>
• Valori principali:
–
–
–
–
–
Content-Transfer-Encoding:
Content-Transfer-Encoding:
Content-Transfer-Encoding:
Content-Transfer-Encoding:
Content-Transfer-Encoding:
7bit
default
8bit
binary
quoted-printable
base64
Identity (no encoding)
• No encoding: usare trasporto corrispondente
• 7bit: trasporto standard SMTP
• 8bit: SMPT esteso
• binary: non supportato per ora
13
MIME: trasporto “ 8bit” ( SMTP esteso –rfc1652)
220 dbc.mtview.ca.us SMTP service ready
EHLO ymir.edu
250-dbc.mtview.ca.us says hello
250 8BITMIME
MAIL From: ned@ymir BODY=8BITMIME
250 <[email protected]>... Sender and 8BITMIME ok
RCPT TO:<[email protected]>
250 <[email protected]>... Recipient ok
DATA
354 Send 8BITMIME message, ending in CRLF.CRLF.
....
(introduzione testo a 8-bit) . . . .
14
uuencode, MIME
7
18 Marzo 2003
MIME: due tipi di codifiche
• Entrambi trasformano nel dominio “ 7bit”
• quoted-printable: serve per testi più o meno
leggibili prevalentemente a 7 bit, con alcuni
caratteri speciali
• quoted-printable usa un meccanismo di “ escape”
• base64: serve per file binari “densi”, (es. immagini,
codice eseguibile)
• base64 usa una tecnica di espansione simile a
uuencode
• Al momento non esistono in Internet sistemi di
trasporto per la posta che permettano di inserire
contenuto “ binary” (stream senza CRLF)
15
MIME: codifica “ quoted-printable”
Messaggio originale: CHISSÀ SE PIOVE
Date:...
To:...
From: Alessandro Lazzari
Subject: prova
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
CHISS=C0 SE PIOVE
Carattere non-ASCII À sostituito dal suo codice
esadecimale
16
uuencode, MIME
8
18 Marzo 2003
MIME: codifica base64 – tabella di conversione
Valore dei 6 bit
Carattere ASCII
Valore dei 6 bit
Carattere ASCII
Valore dei 6 bit
Carattere ASCII
0 1
A B
26 27
a b
52 53
0 1
= (pad)
61 62 63
9 + /
24
Y
50
y
25
Z
51
z
Caratteri per
“National Version”
!
"
#
$
%
&
'
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@ P `
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
17
File codificato “ base64”
• Il file originario è suddiviso in blocchi di 3
byte (24 bit)
• Ogni 6 bit si genera un carattere, secondo la
tabella di conversione
• A fine file:
– Non ci sono residui: no padding
– Avanzano 8 bit: si producono 2 caratteri + “ ==”
– Avanzano 16 bit: si producono 3 caratteri + “ =”
• Caratteri organizzati in linee lunghe max 76
• Non si usano byte di lunghezza
18
uuencode, MIME
9
18 Marzo 2003
Esempio di file codificato “ base64”
----Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=“Prova.txt"
VGVzdCENCg0KR2VudGxlIFJlYWRlcjoNCg0KVGhpcyBpcyBub3RoaW5nIG1vcmUgdGhhbiBh
IHRlc3QgZmlsZSBjcmVhdGVkIHRvIHByb3ZpZGUgZm9kZGVyIGZvciB0aGUgdmFyaW91cyBl
bmNvZGluZyBzY2hlbWVzLiBJZiB5b3UgYXJlIHVzaW5nIGl0IHRvIHRlc3QsIGNvbmdyYXR1
bGF0aW9ucyBvbiB5b3VyIGFnaWxpdHkgaW4gY3V0dGluZywgcGFzdGluZywgc2F2aW5nLCBh
bmQgZGVjb2RpbmcgdXNpbmcgV2luWmlwLg0KDQpFbmpveSE=
16bit
-----
19
MIME – Documenti fondamentali
• RFC-2045. Specifica un numero di nuovi campi
nell’Header del messaggio (DRAFT STANDARD);
• RFC-2046. Definisce 7 nuovi tipi fondamentali di
informazione (DRAFT STANDARD);
• RFC-2047. Specifica come usare caratteri nonASCII nell’Header del messaggio (DRAFT
STANDARD);
• RFC-2048. Procedure da usare per registrare
nuovi tipi di informazione (BEST CURRENT
PRACTICE - BCP);
• RFC-2049. Criteri di conformità ed esempi
(DRAFT STANDARD).
20
uuencode, MIME
10
18 Marzo 2003
MIME – Media types (RFC2046)
•
•
•
•
Text (testo scritto)
Image (richiede display per essere visto)
Audio (richiede un dispositivo audio)
Video (richiede visualizzazione immagini in
movimento)
• Application (altro tipo di dati)
• Composito
– Multipart (più tipi dei precedenti, in serie)
– Message (messaggio incapsulato)
21
MIME: messaggio multiparte (1/2)
Messaggio originale: il file arriverà
(+allegato)
Subject: prova
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="=====================_896341200==_"
Content-Length: 3344
--=====================_896341200==_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
il file arriver=E0
--=====================_896341200==_
22
uuencode, MIME
11
18 Marzo 2003
MIME: messaggio multiparte (2/2)
--=====================_896341200==_
Content-Type: application/octet-stream;
name="Control.exe"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="Control.exe"
TVoQAAUAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAA
AAAAAAAA
. . . . . . . . . .
AB0ACQBQcm9kdWN0VmVyc2lvbgAANC4wMC45NTAAAAAAJAAAAFZh
ckZpbGVJ
c2xhdGlvbgAQBOQE
--=====================_896341200==_
23
MIME –Header Extensions (RFC2047)
From: =?US-ASCII?Q?Keith_Moore?=
[email protected]
SPACE
INIZIO
charset
Quoted-printable like
FINE
To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=
<[email protected]>
Keld Jørn Simonsen
Subject: =?ISO-88591?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
base64
24
uuencode, MIME
12
Scarica

Trasferimento di informazione generica, oltre il plain-text