CommunityChatContattiDoc.UtentiChiSiamoIntroduzioneIRCIntroStoriaGlossarioFAQComandiIRCServicesmIRCeScriptWebChatCercaFAQServereServicesComandiIRCCmdUnreal3.2NickServChanServMemoServOperServGuideVarieAcronimiIRCInstallazioneJVMEmoticonsDCCeFastwebGuidaOPGuidaIRCopRFCeProtocolliRFC1459RFC2810RFC2811RFC2812RFC2813DCCDCC2CTCPPoliciesNetiquetteHelpersOpersSicurezzaFirewallSockseProxyFirewalleProxyTutorialClientsIRCWindowsLinuxMACWebChatmIRC&ScriptmIRCScriptItalianiScriptEsteriAdd-OnSegnalaScriptLoginStaff
RFC e Protocolli - DCC2

La Community DCC2 è un gruppo di lavoro per sviluppatori di software e di tutti coloro interessati ad accertare la compatibilità dei collegamenti diretti tra i Client.
La DCC2 Community attualmente lavora sulla negoziazione delle connessioni e sull’interscambio dei file fra i Client.
Per il futuro la DCC2 Community si sta organizzando per creare uno standard sia per l’inizializzazione delle connessioni tra i Client che per i trasferimenti di “VoiceChat” e “VideoChat” per concludere poi con la serie dei caratteri e dei colori.

- INIZIALIZZAZIONE DELLA CONNESSIONE

Il protocollo di inizializzazione della connessione richiama sia Ipv4 che Ipv6, la crittografia SSL/tls, il NAT e i Firewall. Al contrario dei vecchi sistemi di trasferimento file, la DCC2 punta a diventare un sistema di trasferimento estendibile a tutti gli sviluppi futuri in modo da poterli aggiungere con maggiore facilità per l’esecuzione finale della nuova tecnologia “IRCII. “

- TRASFERIMENTI DI FILE

I trasferimenti di file IRC sono stati limitati storicamente a un singolo file per sessione, inoltre sono stati improntati nel riconoscere i Byte ricevuti durante il trasferimento stesso, in modo che il protocollo TCP li potesse accettare.
I trasferimenti in DCC2 sono resi più veloci grazie al beneficio dei trasferimenti “Multipli” oltre che per la maggiore possibilità che la negoziazione possa essere stabilita. Infatti il nome del file, le dimensioni o altre informazioni non passano mai sulla rete IRC. L’integrità dei file è comunque garantita e controllata con l’ SHA1.

- MISSIONE

1. prevenire la frammentazione dei protocolli di connessione IRC ed assicurare “L’interoperabilità” fra i diversi Client
2. aumentare la capacità dei Client IRC per poter incorporare le nuove tecnologie.
3. chiunque sia amministratore di applicazioni IRC o di Services è libero di partecipare a questo nuovo sistema.


APPUNTI DELLO SVILUPPO DEL LAVORO…

Questo documento descrive un collegamento diretto tra Client nonché la fase di inizializzazione della struttura della connessione.
Il protocollo DCC2 diventa parte della struttura del CTCP (Client To Client Protocol).

Contenuti:
1. introduzione
1.1 cenni storici
1.2 motivazioni
1.3 convenzioni
2. DCC2 descrizione
3. DCC2 incapsulamento del messaggio
4. tokens
4.1 pubblicazione dei tokens
4.1.1 network
4.1.2 transport
4.1.3 sicurezza dei trasferimenti
4.1.4 applicazioni
4.1.5 NAT
4.1.6 SID
4.2 DCC2 Tokens della connessione
4.2.1 Ipv4
4.2.2 Ipv6
4.2.3 Port
4.2.4 Tokens di errore
4.2.5 Messaggi di errore
4.3 DCC2 segnali di trasferimento di IRCFile
4.3.1 File
4.3.2 Dimensioni (size)
4.3.3 Offset
4.3.4 Multi
5. DCC2 inizializzazione
5.1 pubblicazione dei parametri di connessione
5.1.1 descrizione
5.1.2 sintassi
5.1.3 esempi
5.2 accettazione dei parametri di connessione
5.2.1 accettazione della negoziazione
5.2.2 accettazione della sintassi
5.2.3 esempi
5.3 connessione
5.3.1 stabilire una connessione TCP
5.3.2 messaggio di inizializzazione
5.3.3 esempi di negoziazione completata
6. Esempi
6.1 DCC2 sessione di Chat
6.2 DCC2 sessione di File
6.3 DCC2 NAT
7. Compatibilità col vecchio DCC
8. Considerazioni sulla sicurezza


1. Introduzione

1.1 cenni storici

DCC2 Direct Client Connection 2.0, è una specifica attualmente in sviluppo da parte di http://www.dcc2.org .
DCC2 crea una struttura per standardizzare le connessioni fra i Client. Il sistema DCC2 permette che i Client negoziino in modo automatico i parametri di connessione così da rendere possibile che i Client degli utenti stabiliscano automaticamente sia i parametri di connessione che il processo di negoziazione.

1.2 Motivazioni

L’attuale protocollo DCC punta ancora sui vecchi sistemi infatti punta sul riconoscimento dei file trasferiti o comunque sulle specifiche che il protocollo TCP già accetta.

[ Torna all'indice ]


2. DCC2 descrizione

DCC2 permette che i Client negoziino le regolazioni del collegamento usando il meccanismo della “Stretta di mano”.
I protocolli disponibili vengono inviati dal Client offerente al Client ricevente. Il Client di ricezione può quindi rispondere all’offerta elencando a sua volta i suoi protocolli disponibili oppure accettare direttamente e automaticamente l’offerta ricevuta.
I protocolli e le opzioni disponibili sono presenti in una speciale lista (case-insensitive) comunque separata dai “Token=value”. Questo è il primo passo verso la “Standardizzazione”.

[ Torna all'indice ]


3. DCC2 incapsulamento del messaggio

Tutti i messaggi DCC2 sono incapsulati in un “IRC PRIVMSG” da un utente ad un altro in un determinato canale. Questa parte del messaggio di PRIVMSG deve cominciare e concludersi con un carattere “Ottale” /001.
Es. PRIVMSG nickname :/001DCC2 application=IRCChat Network=IPv4,IPv6 transportsecurity=SSL3, tls1 SID=10a/001

[ Torna all'indice ]


 

4. tokens

4.1 pubblicazione dei tokens

4.1.1 network

Specifica una lista dei network ove è possibile la connessione.
I valori possibili includono IPv4 e IPv6.
Es. Network=IPv4, IPv6

4.1.2 Transport

Specifica una lista dei trasferimenti possibili.
In una connessione i valori possibili includono TCP, SCTP, UPD
Es. Transport=Tcp

4.1.3 TransportSecurity

Specifica una lista delle criptazioni possibili.
In una connessione i valori possibili includono SSL3, TLS
Es. TransportSecurity=SSL3, TLS

4.1.4 Applicazioni

Specifica l’applicazione comune in una connessione. Ci sono alcuni valori possibili per questo Token. I valori includono IRCChat e IRCFile.
Es. Application=IRCFile

4.1.5 NAT

Specifica che i collegamenti ricevuti non sono disponibili. Questo Token non ha mai un valore.

4.1.6 SID

Specifica un identificazione per la sessione di collegamento. Infatti per qualsiasi sessione è importante inviare un segnale ben preciso (identificazione) per evitare una sorte di ambiguità nella ricezione da parte dell’altro Client specialmente se si tratta di un trasferimento “Multifile”. Questo Token deve avere un valore unico per ogni trasferimento ad un utente.

[ Torna all'indice ]


4.2 DCC2 Tokens della connessione

4.2.1 IPv4

Specifica che è presente un interfaccia IPv4. L’IPv4 Token specifica un indirizzo di tipo IPv4 al quale è possibile connettersi.
Es. IPv4=192.168.23.43

4.2.2 IPv6

Specifica che è presente un interfaccia IPv6. L’IPv6 Token specifica un indirizzo di tipo IPv6 al quale è possibile connettersi.
Es. IPv6=::C0A8:6464

4.2.3 Port

È la port su cui connettere gli indirizzi IPv4 o IPv6 offerti. Il Port Token è sempre un valore.
Es. Port=9834

4.2.4 Tokens di errore

Indica il tokens specifico che ha causato l’errore.
Es. ErrorTokens=Network, Transportsecurity

4.2.5 Messaggi di Errore

Specifica a un determinato utente il perché la connessione è fallita o è stata rifiutata.
Es. ErrorMessage=”I do not trust you”

[ Torna all'indice ]


4.3 Segnali di trasferimeto di IRCFile

4.3.1 File

Specifica il nome del File trasmesso. Non ci sono comunque le informazioni sulla directory di provenienza. Se il nome del File contiene spazi deve essere scritto tra le “”. Così si limita ad un singolo File il trasferimento.
Es. File=”my file.txt”

4.3.2 Dimensioni (Size)

Specifica le dimensioni del File espresse in Bites.
Es. Size=93424

4.3.3 Offset

Il bite di offset dal quale fare un eventuale resume
Es. Offset=7543

4.3.4 Multi

Specifica il nome del file, la descrizione e le dimensioni che saranno pubblicati durante la connessione. Il valore e la dimensione in byte del file multi xml.
Es. Multi=9874

[ Torna all'indice ]


5. DCC2 inizializzazione

5.1 Pubblicazione dei parametri di connessione

5.1.1 Descrizione

Il client offerente manda un messaggio incapsulato usando il CTCP e indicando le opzioni DCC2 e i parametri di connessione sostenuti. Questo segnale ancora senza valori, viene inviato al client ricevente. Il tipo di applicazione, il network e il SID, sono sempre richiesti in questo primo messaggio. Usando il + o il – si contrassegnano le opzioni. Il segnale del livello dell’applicazione può essere mandato durante la connessione. Il segnale di trasferimento di un file è mandato al Client ricevente tramite un valore nel contesto del trasferimento. Tutto ciò serve se il Client ricevente ha in ascolto una connessione inizializzata con NAT.

5.1.2 Sintassi

I parametri di connessione sostenuti da ogni Client sono contenuti in specifici protocolli. La sintassi che segue mostra degli esempi.
Stringa contenente i connection Tokens e qualsiasi opzione:
Dcc2-publish = dcc2` 1* (space (connectionTokens | AppTokens))

Una o più connection Tokens:
ConnectionTokens = ConnectionToken [ 1* (space ConnectionToken)]

Un connectionToken opzionalmente seguito da una lista di Tokens supportati:
ConnectionToken = 1*TokenChars [(‘=’ | ‘+=’ ) 1*TokenChars [ 1* (‘,’ 1*TokenChars) ] ]
Apptoken = 1*TokenChars [ (‘=’ | ‘+=’ ) dcc2-quotedname ]
TokenChars 1* (digit | alpha)

Ogni carattere di nome di File valido deve avere le “ se ci sono degli spazi.
Dcc2-quotedname = 1*filechar | (%d34 1* (filechar | space ) %d34)
Filechar = digit | alpha | filepunct

Un file Punct valido:
!#$%&’()+,-.=@[]^_{}~
Filepunct = %d33 %d35-41 %d43-46 %d61 %d64 %d91 %d93-95 %d123 %d125-126

5.1.3 Esempi

DCC2 Chat:
schemi di una sessione di chat con IPv4 o IPv6 e 2 schemi di criptazione opzionali
DCC2 Application=IRCChat Network=IPv4, IPv6 TransportSecutity+=SSL3 TLS1 SID=1

Sessione di chat con solo IPv6 disponibile
DCC2 Application=IRCChat Network=IPv6 SID=1

Inizializzazione di una sessione di chat con solamente IPv4 disponibile col Client offerente che non può accettare la connessione
DCC2 Application=IRCChat Network=IPv4 NAT SID=1

DCC2 condivisione di File

Inizializzazione di un trasferimento di File con IPv4 o IPv6 e due schemi di criptazione disponibili
DCC2 Application=IRCFile Network=IPv4, IPv6 TransportSecurity SSL3 TLS1 SID=1 Filename=”same file.txt” Size=3423

Inizializzazione di una sessione di trasferimento File con solo IPv6 disponibile
DCC2 Application=IRCFile Network=IPv6 SID=1 Filename=samefile.txt Size=3423

Inizializzazione di una sessione di trasferimento File con solo IPv4 disponibile con il Client offerente che non può accettare la connessione.
DCC2 Application=IRCFile Network=IPv4 NAT SID=1 Filename=somefile.txt Size=3423.

Inizializzazione di una sessione di trasferimento File con solo IPv4 disponibile usando DCC2 con una descrizione di File fuori dagli standard
DCC2 Application=IRCFile Network=IPv4 SID=1 Multi=983

[ Torna all'indice ]


5.2 Accettazione dei parametric di connessione

5.2.1 Accettazione della negoziazione

Il Client ricevente manda un messaggio incapsulato di accettazione della DCC2 usando il CTCP e indicando quindi I settaggi e le opzioni che può sostenere per il trasferimento. Questo gruppo di di settagli è un sottoinsieme dei parametri pubblicati; i connection tokens senza valori possono essere trasmessi al Client offerente per indicare i protocolli comuni che possono essere usati.
Se il Client offerente indica che non può accettare la connessione in corso, il Client ricevente può creare una port d’ascolto su un interfaccia di supporto usando il sottoinsieme dei parametri pubblicati; il Client ricevente dovrebbe allora trasmettere i parametri di connessione con valori ben determinati al client offerente.
Se nessuno dei Client può accettare la connessione in corso o non può generare un interfaccia comune viene spedito un messaggio tipo: “CannotAccept DCC” il messaggio CannotAccept può contenere il SID e l’ErrorToken o anche l’ErrorMessage.

Se il Client ricevente nega la connessione può essere spedito un messaggio di diniego: REFUSED.
Il messaggio di rifiuto può includere il SID o un ErrorMessage.

5.2.2 Accettazione della sintassi

L’accettazione dei parametri di connessione fa si che i Client trovino dei protocolli comuni. La sintassi che segue spiega come.

Messaggio di accettazione di DCC2 o di guasto con SID
Dcc2-response = ‘DCC2’ space ( ‘Accept’ | ‘CannotAccept’ | ‘Refused’ ) 1* (space) Token = 1*TokenChars [ ‘= ‘dcc2-quotedname ]

5.2.3 Esempi

5.2.3.1 DCC2 Chat

Accettazione di una sessione di chat con IPv4 o IPv6 e schemi di criptazione disponibili
Client offerente Send
DCC2 Application=IRCChat Network=Ipv4, IPv6 TransportSecurity+=SSL3, TLS1 SID=1

Il Client ricevente vorrebbe usare IPv6 e criptazione TLS1, risponde
DCC2 Accept IPv6 TLS1 SID=1

Oppure se vuole IPv4 senza criptazione manda
DCC2 Accept IPv4 SID=1

Accettazione di una sessione di Chat con solo IPv6 disponibile.
Client offerente manda
DCC2 Application=IRCChat Network=IPv6 SID=2

Il Client Ricevente vuole usare IPv6
DCC2 Accept IPv6 SID=2

Il Client offerente non può usare IPv6 ma solo IPv4 e non può stabilire la connessione
DCC2 CannotAccept SID=2 ErrorTokens=Network

Esempi di rifiuto…
Sessione di Chat con solo IPv4 disponibile col Client offerente che non può stabilire la connessione in ingresso.
Client offerente manda
DCC2 Application=IRCChat Network=IPv4 NAT SID=1

Il Client ricevente crea una connessione su IPv4
DCC2 Accept IPv4=192.168.100.100 Port=7323 SID=1

Se invece il Client ricevente non può accettare la connessione :
DCC2 CannotAccept SID=1 ErrorTokens=NAT

5.2.3.2 DCC2 condivisione di File

Accettazione di una sessione di trasferimento file con IPv4 o IPv6 e due criptazioni disponibili
Il Client offerente manda
DCC2 Application=IRCFile Network=IPv4, IPv6 TransportSecurity=SSL3, TLS1 Filename=’some file.txt” Size=3423 SID=2

Client ricevente vorrebbe stabilere la connessione con IPv4 SSL3
DCC2 Accept IPv4 SSL3 Filename=”some file.txt” Size 3423 SID=2

Accettazione di una sessione di trasferimento File con solo IPv6 disponibile
Il Client offerente manda:
DCC2 Application=IRCFile Network=IPv6 Filename=somefile.txt Size=3423 SID=a

Il Cliente ricevente stabilirà il download indicando anche un punto di resume
DCC2 Accept IPv6 Filename=somefile.txt Size=3423 Offset=1202 SID=a

Oppure se il Client ricevente non può accettare IPv6:
DCC2 CannotAccept SID=a ErrorTokens=Network

Oppure se il Client ricevente rifiuta il File proposto:
DCC2 Refused SID=a ErrorMessage=”We ‘ve already got one!”

Accettazione di una sessione di trasferimento File con solo IPv4 disponibile col Client Offerente che non riesce a stabilire la connessione

Client offerente manda:
DCC2 Application=IRCFile Network=IPv4 NAT Filename=somefile.txt Size=3423 SID=1
Il Client ricevente potrebbe accettare il trasferimento e apre la connessione
DCC2 Accept IPv4=192.168.23.342 Port=8732 Filename=somefile.txt Size=3423 SID=1

Il Cliente offerente non riesce però a stabilire la connessione e manda:
DCC2 CannotAccept SID=1 ErrorTokens=NAT

Accettazione di una sessione di trasferimento file con solo IPv4 disponibile su banda DCC2
DCC2 Application=IRCFile Network=IPv4 Multi=983 SID=1

Il Client ricevente potrebbe accettare la connessione
DCC2 Accept IPv4 Multi=983 SID=1

Ma non riesce a accettare perché trattasi di trasferimento in multisessione
DCC2 CannotAccept SID=1 ErrorTokens=Multi

[ Torna all'indice ]


5.3 Connessione

5.3.1 Connessione sul TCP stabilita

Il Client offerente riceve un messaggio di accettazione di DCC2 usando CTCP indicando le opzioni DCC2 e i parametri di connessione disponibili da usare nella trasmissione. Se i parametri di connessione hanno valori il Client ricevente attende la connessione. Quindi il Client offerente può connettersi su una Port specifica. A questo punto non si necessita di messaggi di CTCP addizionali.

Se invece i parametri di connessione non sono associati a valori, il Client ricevente crea un Socket in ascolto usando dei protocolli poi dettati dal messaggio di Accept. Il Client offerente può quindi mandare un altro messaggio di Accept di DCC2 contenente i parametri associati al socket in ascolto creato.

5.3.2 Messaggio di inizializzazione

I parametri di inizializzazione sono specificati su un protocollo comune supportato. La sintassi è specificata nei paragrafi precedenti.

5.3.3 Esempio di negoziazione completata

5.3.3.1 DCC2 Chat

Fase finale di una sessione di inizializzazione di Chat usando IPv6 TLS1

Client offerente manda:
DCC2 Accept IPv6=::C0A8:6464 Port=8543 TLS1 SID=1

Conclusione di una sessione di inizializzazione di Chat con solo IPv6 disponibile
Il client ricevente vorrebbe usare IPv6 e manda:
DCC2 Accept IPv6 SID=1

Il client offerente accetta e manda:
DCC2 Accept IPv6=::C0A8:6464 Port=8543 SID=1

5.3.3.2 DCC2 condivisione di File

Conclusione di una sessione di trasferimento File con Ipv4 e Ipv6 e due schemi di criptazione disponibili

Il Client ricevente vorrebbe riprendere usando IPv4 e SSL3
DCC2 Accept IPv4 SSL3 Filename=”some file.txt” Size=3423 Offset=1003 SID=2

Il Client offerente manda:
DCC2 Accept IPv4=192.168.34.231 Port=9341 SSL3 Filename=”some file.txt” Size=3423 SID=2

Conclusione di una sessione di trasferimento File con IPv6
Il Client ricevente accetta il trasferimento:
DCC2 Accept Ipv6 Filename=”some file.txt” Size=3423 SID=1

Il Client offerente manda:
DCC2 Accept IPv6=::C0A8:6464 Filename=”some file.txt” Size=3423 SID=1

Conclusione di una sessione di trasferimento File con IPv4 disponibile usando DCC2 con le varie opzioni e parametri descritti
Il Client ricevente accetta il trasferimento
DCC2 Accept IPv4 Multi=983 SID=1

Il Client offerente può quindi spedire:
DCC2 Accept IPv4=192.168.34.231 Port=9251 Multi=983 SID=1

[ Torna all'indice ]


6. Esempi

6.1 Sessione di Chat in DCC2

Proposizione di una sessione di Chat DCC2 con IPv4 o IPv6 e due schemi di criptazione disponibili

Il Client offerente spedisce i parametri e le opzioni disponibili
DCC2 Application=IRCChat Network=IPv4, IPv6 TransportSecurity=SSL3 TLS1 SID=10a

Il Client ricevente accetta usando l’interfacia IPv6 e TLS1
DCC2 Accept IPv6 TLS1 SID=10a

Il Client offerente apre una port e stabilisce la connessione
DCC2 Accept IPv6=::C0A8:6464 Port=4521 TLS1 SID=10a

6.2 DCC2 Sessione di File

Proposizione di un traesferimento File con Ipv6 e uno schema di criptazione disponibile facoltativo

Il Client offerente pubblica i suoi parametri di connessione e le opzioni di trasferimento
DCC2 Application=IRCFile Network=IPv6 TransportSecurity+=TLS1 SID=abcde3 Filename=todo.txt Size=98342

Il Client ricevente accetta usando IPv6 senza nessuna criptazione
DCC2 Accept IPv6 SID=abcde3 Filename=todo.txt Size=98342

Il Client offerente crea una Port e stabilisce la connessione
DCC2 Accept IPv6=::C0A8:6464 Port=3412 TLS1 SID=10° Filename=todo.txt Size=98342

6.3 DCC2 NAT

Proposizione di una sessione di Chat con IPv4 o IPV6 e due schemi di criptazione disponibili

Il Client offerente spedisce i suoi parametri e le opzioni disponibili
DCC2 Application=IRCChat Network=IPv4, IPv6 TransportSecurity=SSL3 TLS1 SID=405

Il Client ricevente crea una port e stabilisce la connessione
DCC2 Accept IPv6=::C0A8:6464 Port=7322 TLS1 SID=405

[ Torna all'indice ]


7. Compatibilità col vecchio DCC

Le vecchie connessioni in DCC usano un insieme di parametri Fissi per collegare le port e stabilire la connessione. La maggior parte dei Client ignorano i parametri del vecchio DCC permettendo che il DCC2 sia usato in maniera compatibile. Se un Client desidera creare una connessione che potrebbe essere possibile col vecchio DCC con interfaccia IPv4 senza criptazioni o firewall, il CLient offerente puo creare una socket e spedire una richiesta di DCC storico. Il Client ricevente dovrebbe stabilire la connessione adeguando i propri parametri di DCC2 alla richiesta di DCC storico.

Se invece questo Client ricevente volesse usare dei parametri aggiuntivi ad esempio di criptazione, può rispondere con un messaggio DCC2 di accettazione e spedire comunque quei parametri richiesti prima di stabilire definitivamente la connessione. Se l’offerente non può supportare questi parametri la connessione è comunque possibile usando i parametri pubblicati in partenza da Client offerente con le regole del vecchio DCC.

[ Torna all'indice ]


8. Considerazioni sulla sicurezza

Le porte sotto la 1024 sono privilegiate dai sistemi UNIX e non dovrebbero essere usate per le DCC in generale.
I produttori di Client dovrebbero essere attenti a questo fattore, nonché creare dei Client sensibili al controllo delle DCC2 rifiutate o non accettate per difendersi da potenziali attacchi di Flooding. Dovrebbe sempre essere possibile inviare un messaggio per spiegare l’errore o il fallimento della connessione.

 

Traduzione del documento in lingua originale a cura di :
Dario "Flanagan" Ulgharaita dariowt@libero.it
Michele "M|[ck]3y" Bagnoli mickey@ircitaly.net
Sito originale: www.dcc2.org
Ultima revisione: 21 Giugno 2004

E' possibile copiare e diffondere, integralmente o parzialmente, gli articoli solo citando la fonte www.irchelp.it e i rispettivi autori.
IRCHelp.it e IRCItaly.net sono prodotti registrati da WWWorld S.r.l. P.IVA 02207191202 per correzioni, suggerimenti, contatti: info@ircitaly.net