Monday 30 November 2020 01:25:11

Documenti

Guida alle DCC

DCC - Direct Client Connection

Il protocollo IRC non contempla alcun tipo di trasferimento files nella propria struttura, col risultato che i vari clients hanno studiato un sistema che permettesse una connessione diretta fra due computers per il passaggio dei file.
Questo è andato sotto il nome di DCC (direct client connection).
Spesso e volentieri, trattandosi di una connessione TCP su porta non-standard al pc di un'altra persona, sorgono problemi legati all'accessibilità di questa porta sul sistema che accetta la connessione. Che, contrariamente a quanto si è portati a pensare, non è il pc del destinatario ma quello del mittente.
In altre parole, se il sottoscritto manda un file ad un'altra persona e non si riesce a stabilire la connessione (che dovrebbe avvenire tramite collegamento del suo pc al mio) è molto probabile che il problema sia mio, e non suo.
 

Questa pagina si propone di elencare alcuni tipi di problema e fornirne una possibile risoluzione, ed è stata scritta grazie alle esperienze accumulate dal sottoscritto e da Mav su problemi di questo tipo. La maggior parte degli accorgimenti è presentata per mIRC, ciò non toglie che possano essere validi per clients diversi.
 

Cenni sul funzionamento delle DCC
Blocco dovuto al tipo di file (file type ignored)
Impossibile risolvere local host (unable to resolve)
Impossibile collegarsi al pc del mittente (stallo)
- Il firewall di Windows XP
- I firewalls in generale
- Fastweb: ip interni e pubblici
- Condivisione della connessione
- DCC su LAN con routers
Note e commenti su DCC troubleshooting

 

1. Cenni sul funzionamento delle DCC

Se non si è interessati al modo in cui funzionano le DCC e si cerca semplicemente la soluzione al proprio problema, si può tranquillamente saltare questa prima parte e magari cercare nell'indice sopra. Per tutti gli altri, benvenuti.
La DCC viene richiesta attraverso un CTCP, strutturato nella seguente forma:
 

PRIVMSG Destinatario :DCC Tipo Argomento Indirizzo Porta [Dimensione]

Destinatario ovviamente è il nick della persona cui vogliamo inviare un file o con la quale vogliamo iniziare una conversazione in dcc. Proprio a seconda di quel che intendiamo fare occorre scegliere il parametro Tipo, che può essere SEND (per l'invio di un file) o CHAT (per la conversazione in DCC). Se intendiamo effettuare un DCC SEND allora l'Argomento sarà ovviamente il nome del file da inviare, mentre per la CHAT il parametro Argomento è ininfluente (di solito si riscrive la stringa "chat"). Arriviamo quindi ai parametri critici: Indirizzo (ossia forniremo il nostro IP alla persona cui dobbiamo per esempio inviare il file, per permettere a questa di collegarsi al nostro pc) e Porta (diciamo su quale porta deve collegarsi). Per i files, c'è anche il parametro Dimensione (in bytes).
 

Lanciato il comando DCC, viene creato un socket legato (binding) a INADDR_ANY, porta 0, e lo si mette in ascolto. Viene inviato il ctcp della DCC, fornendo indirizzo e porta del socket (questo è idealmente preso dall'indirizzo del lato locale del socket collegato al server. Presumibilmente si tratta dell'interfaccia più vicina al resto della rete, e permette un minor numero di hop in caso di nodi gateway). Al ricevimento della connessione, questa viene accettata, il socket passivo chiuso e la transazione comincia su uno nuovo.
Dal punto di vista del destinatario, il ctcp della DCC lo porta a scegliere se accettare o meno la DCC; nel primo caso creerà un socket TCP che andrà a collegarsi all'indirizzo sulla porta fornita.
 

Alcuni clients supportano anche il resume del file, che si traduce semplicemente in un'aggiunta al protocollo con modifiche al parametro TIPO nel ctcp. Per esempio, se il file è già presente nella cartella di arrivo di mIRC, viene richiesto un resume con un altro ctcp inviato dal destinatario:
 

PRIVMSG Mittente :DCC RESUME Nomefile Porta Offset

Dove per Offset si intende semplicemente la dimensione del file che il destinatario già possiede, che consente di spostarsi al punto giusto per proseguire il trasferimento dal mittente. Quest'ultimo dovrà ricevere il ctcp per il resume e dare conferma finale per l'inizio del trasferimento. Questa avviene con l'ultimo ctcp che è praticamente identico come forma a quello precedente, tranne che per il fatto che è ovviamente inviato dal mittente del file al destinatario, e il parametro TIPO invece che RESUME diventa ACCEPT.
 

Infine dobbiamo citare una modifica al protocollo DCC introdotta da mIRC che permette di inviare e ricevere file anche per chi è dietro ad un server SOCKS5. In sostanza, se chi invia un file è dietro ad un server SOCKS (qualsiasi versione), mIRC aggiunge alla richiesta DCC un numero identificativo e sostituirà il numero di porta con uno 0. Il client di chi riceve si comporterà in due modi diversi: nel caso il ricevente abbia accesso diretto ad Internet, senza passare attraverso Proxy o Socks, sarà proprio chi riceve ad aprire un socket in ascolto, segnalando al richiedente la porta da usare per la connessione e specificando lo stesso identificativo ricevuto nella richiesta DCC. Se il ricevente si trova dietro ad un SOCKS5 il funzionamento è simile, ma prima di inviare la conferma al richiedente, il client di chi riceve chiederà al server SOCKS5 un socket in ascolto.
Il protocollo è modificato allo stesso modo sia in caso di DCC SEND, che di CHAT o di RESUME.
E` importante notare che tale estensione al protocollo funziona solo con le versioni più recenti di mIRC (è supportata da X-Chat 1.8.10 ma solamente in ricezione) e solamente in presenza di server SOCKS5, in quanto i SOCKS versione 4 non permettono di richiedere socket in listening.
 

2. Blocco dovuto al tipo di file

Dal momento che determinati tipi di files sono veicoli per virus o possono avere comunque conseguenze negative se eseguiti, i clients cercano di offrire una prima protezione bloccando automaticamente qualsiasi transazione di file di un certo tipo (considerati "a rischio": eseguibili, scripts, o documenti ipertestuali). Per disattivare questa protezione, è sufficiente accedere alle opzioni del proprio client e trovare la voce relativa. Nel caso di mIRC (che blocca presentando il messaggio di errore "file type ignored"), è sufficiente digitare /dcc ignore off per disattivare questo blocco. E' anche possibile andare nelle opzioni (ALT+O) su DCC->Folders per gestire i tipi di files ignorati.
Alcuni servers IRC offrono persino il controllo dell'estensione del file direttamente al momento del ctcp da un client all'altro, e si occupano di bloccare i tipi di files a rischio. In questo caso il messaggio di errore è una server notice che spiega in modo chiaro perchè il tipo di file è stato bloccato. Nel caso di Azzurra (o più in generale di chi adotta bahamut), è sufficiente che il destinatario digiti /dccallow +NICKDELMITTENTE per autorizzare l'invio di un tipo di file considerato a rischio.
 

3. Impossibile risolvere local host

Come scritto nei cenni sul funzionamento delle DCC, per funzionare correttamente queste richiedono l'IP del mittente (che sarà poi passato al destinatario per la connessione). Può sorgere spontanea la domanda: da dove viene preso questo IP?
A meno di non volerlo inserire a mano nelle opzioni del client, i metodi di lookup sono due. Quello locale e quello basato sul server. Nella maggior parte dei casi la scelta del metodo (impostabile in mIRC dalle opzioni su Connect->Local Info) non porterà ad alcun cambiamento.
Il discorso cambia in presenza di vhosts o ipv6. In tal caso il lookup non dovrà essere quello su server, altrimenti mIRC imposterà come ip per la dcc quello ottenuto facendo un /userhost sul server IRC, prendendo l'ip del vhost piuttosto che il vostro.
Se dovesse capitarvi di tentare l'invio un file e ricevere per tutta risposta il messaggio "unable to resolve local host", vuol dire che mIRC non riesce a procurarsi il vostro ip da passare al destinatario del file. Un primo tentativo di risoluzione del problema è il comando di mIRC /localinfo -h che provvede a fare un lookup di tipo normale (non quello server) che nella maggior parte dei casi corregge l'impostazione.
Una situazione anomala avviene quando entrambi i metodi di lookup forniscono un ip che non è quello corretto, ed è diverso da quello con cui si esce e si compare sul server IRC (un IRC operator può controllare qual è il vostro ip sul server IRC). In questo caso occorre capire a cosa è dovuto il lookup sbagliato. Se /localinfo -h non risolve il problema, una soluzione può essere impostare mIRC in modo che prenda da server (quindi lookup su server) SOLO l'ip e non si affidi alla risoluzione del local host (che in questi casi è sbagliata). E' sufficiente, sempre dalle opzioni Connect->Local Info, scegliere di ottenere solo l'ip deselezionando local host. Alternativamente si possono provare altre combinazioni di lookup (server o normal) e di get on connect (prendere o meno anche il local host da risolvere per l'ip).
Estrema soluzione per problemi di questo tipo, è l'inserimento a mano, da Connect->Local Info nell'editbox per l'IP, dell'ip corretto per la connessione diretta al proprio pc.
 

4. Impossibile collegarsi al pc del mittente

Questa è senz'altro la situazione più segnalata dagli utenti, ed è la risultante comune di vari sotto-casi di problemi con le DCC. Per qualche ragione non è possibile collegarsi al pc del mittente... magari è stato fornito al destinatario l'ip sbagliato, oppure c'è qualcosa che blocca la connessione alla porta scelta. Fatto sta che la finestra di DCC rimane lì ferma, la transazione del file non comincia (perchè il socket cerca inutilmente di connettersi alla porta indicata), e dopo un pò arriva il messaggio di fallimento della DCC. Segue la serie dei casi trattati.
 

4.1 Il firewall di Windows XP

Microsoft ha pensato bene di impostare il suo firewall nativo di Windows XP (un bel tool comunque) attivo di default per le connessioni create, e per giunta con l'ordine di bloccare tutto ciò che arriva sulle porte non standard. In queste condizioni, è praticamente impossibile inviare un file a qualcuno. Per risolvere il problema è sufficiente andare su Avvio->Impostazioni->Connessioni di rete, selezionare la propria connessione cliccandoci sopra col tasto destro del mouse e scegliere proprietà. Si vada alla tab avanzate (l'ultima) e sarà possibile disattivare il firewall, con la modifica che risulta attiva fin da subito. E' anche possibile configurarlo opportunamente per risolvere il problema, ma di questo ci occupiamo in linee generali sulla sezione per gli altri firewalls.
 

4.2 I firewalls in generale

Ogni firewall che si rispetti dà la possibilità di impostare opportune regole per accettare le connessioni TCP o UDP sulle porte. A questo punto, volendo realizzare impostazioni di questo tipo, ci serve sapere quale porta mIRC o un altro client andrà ad utilizzare per le DCC.
Nel caso di mIRC, l'impostazione di default permette di utilizzare una porta dalla 1024 alla 5000 per le DCC. Ovviamente non è pensabile mettersi ad impostare l'accept per connessioni in entrata su un intervallo così ampio di porte. Per fortuna mIRC dà la possibilità di cambiare questo gruppo di porte, su Connect->Options premendo sul tastino adnvanced è possibile scegliere in DCC ports la prima e l'ultima dell'intervallo. Supponiamo per esempio di impostare mIRC per l'uso di porte dalla 1024 alla 1030. Adesso andiamo nelle impostazioni del nostro firewall (si presuppone che chi abbia un firewall sappia anche regolamentarlo, altrimenti si può leggerne la documentazione) e scegliamo di creare una nuova regola per mirc.exe (altrimenti dovremo impostarla come regola generale e non è il massimo della vita, alcuni firewalls non permettono di diversificare l'accesso alle porte in base al programma coinvolto nella transazione, un esempio di firewall che invece lo permette è TPF). Scegliamo una connessione TCP, qualsiasi porta remota e porta locale 1024, qualunque IP di provenienza della connessione ed abbiamo finito. Ripetiamo la procedura per le porte locali fino alla 1030 (abbiamo scelto questo intervallo di esempio sul mIRC), e il firewall non dovrebbe più bloccare le connessioni DCC.
 

4.3 Fastweb: ip interni e pubblici

L'argomento è stato trattato esaustivamente da Mav. Per maggiori informazioni, leggere il documento DCC e Fastweb presente in questa stessa sezione e raggiungibile dall'indice dei documenti.
 

4.4 Condivisione della connessione

Microsoft ha introdotto nelle varie versioni del suo sistema operativo Windows successive alla 98SE (compresa) la funzionalità di condivisione della connessione Internet. Tale strumento si basa su un sistema NAT per permettere alle macchine client della proria LAN un accesso trasparente ad internet attraverso un PC (che definiremo "server") direttamente connesso ad Internet. Purtroppo tale funzionalità pone pesanti limitazioni all'uso delle DCC in IRC: in particolare non è possibile inviare file o richieste di DCC Chat ad altri, ma solamente riceverle.
 

E` possibile ovviare a tale problema sfruttando il supporto SOCKS5 di mIRC: sarà necessario installare sul proprio sistema "server" un software SOCKS5 e configurare mIRC in modo da usare tale server SOCKS5 per le DCC. Il software che consigliamo, per la sua leggerezza e la semplicità di configurazione, è il Proxy di AnalogX (www.analogx.com). Dopo aver installato (sul PC direttamente connesso ad Internet) ed avviato tale software è sufficiente disabilitare il supporto a tutti i protocolli (escluso SOCKS) in modo da sfruttare la trasparenza del NAT, e impostare nella casella "Proxy binding" l'IP INTERNO del PC direttamente connesso ad Internet. Attenzione: quest'ultima operazione è particolarmente importante in quanto i server IRC di Azzurra controllano la presenza di "open SOCKS" sull'IP di prevenienza degli utenti IRC e, nel caso la ricerca dia esito positivo, aggiungono un AKILL sull'IP del SOCKS impedendovi così la connessione!
 

 

Proxy AnalogX
 

Dopo aver installato e impostato correttamente il server SOCKS è sufficiente accedere alle opzioni di mIRC, sezione connect->firewall, e attivare il supporto SOCKS5 per le DCC, inserendo come hostname l'IP interno del PC che fa da "server SOCKS" (è lo stesso inserito nella casella "Proxy binding" del proxy AnalogX) e come porta 1080.
 

4.5 DCC su LAN con routers

Con la crescente diffusione degli abbonamenti ADSL è frequente trovare utenti che scelgono di acquistare un router per condividere la connessione fra tutti i PC della propria LAN. Poichè quasi sempre la condivisione avviene attraverso un sistema NAT ci troveremo di fronte agli stessi problemi che affliggono la condivisione della connessione dei sistemi Windows (vedi punto precedente) con la differenza che in questo caso non possiamo installare un server SOCKS sul router.
 

Fortunatamente, però, buona parte dei router in commercio permette di ovviare a questo problema in vari modi. Vediamo le tre soluzioni principali:
 

1) Port mapping
Alcuni router permettono di "mappare" alcune porte in ingresso sulle corrispondenti porte delle macchine della LAN. In questo modo sarà sufficiente accedere al pannello di configurazione del router e rimappare un range di porte (ad esempio 5000-5020) su uno degli IP dei PC della propria LAN e impostare mIRC in modo da usare quel range di porte per le DCC (questo parametro può essere variato nella sezione DCC->Options delle opzioni di mIRC, voce "DCC Ports"). E` possibile assegnare range diversi alle varie macchine della propria LAN in modo da consentire a tutti i PC l'utilizzo delle DCC. Per informazioni su come accedere al pannello di configurazione del router e su come "mappare" le porte fate riferimento al manuale utente. In alcuni router tale funzione è denominata "NPAT", oppure "PAT". Nel router AtlantisLand I-Storm tale funzione è chiamata "Virtual Server". Gli utenti Linux che condividono la connessione attraverso le funzionalità NAT integrate nel kernel di Linux possono usare il tool iptables (kernel > 2.4.0) per configurare i port map opportunamente.
 

2) Socks
Nel caso il router utilizzato integri un server SOCKS al suo interno sarà sufficiente attivare tale funzionalità sul router e configurare mIRC come al punto 4.4, ma inserendo come hostname l'indirizzo IP interno del router e facendo riferimento al manuale di quest'ultimo per quanto riguarda la porta da utilizzare (che molto probabilmente sarà 1080).
 

3) Host DMZ
Nel caso vogliate utilizzare le DCC da una sola macchina della vostra LAN potrete sfruttare questa possibilità fornita da alcuni router: vi basterà configurare come host DMZ l'IP del PC da cui volete usare le DCC e tutti tentativi di connessione al router (Attenzione: TUTTI i tentativi, non solo quelli relativi alle DCC!) saranno redirezionati sull'IP indicato, a meno che non corrispondano a qualche regola di mappatura specificata.
 

Se nessuno dei tre metodi è applicabile nel vostro caso potrete usare la procedura spiegata al punto 4.4, ma in questo caso potrete inviare DCC solamente ad utenti mIRC che non siano dietro NAT/Firewall.
 

5. Note e commenti

Le informazioni contenute in questo documento sono fornite come linee guida per un corretto funzionamento delle DCC. Lo staff di Azzurra non si assume alcuna responsabilita' di danni e/o malfunzionamenti derivati dall'uso scorretto delle informazioni qui riportate.
Un grazie di cuore a Mav per le sezioni sulla DCC tramite Socks5, condivisione della connessione e LANs con routers.


C|ty_Hunter

Azzurra IRC Network © 1997-2020

Pagina generata in 15 millisecondi
CSS HTML