# Internet Relay Chat

Internet Relay Chat (IRC) è un protocollo di messaggistica istantanea su Internet. Consente sia la comunicazione diretta fra due utenti che il dialogo contemporaneo di gruppi di persone raggruppati in "stanze" di discussione, chiamate "canali".

## Storia

Il protocollo di messaggistica istantanea venne creato da Jarkko Oikarinen nell'agosto 1988 per sostituire un programma chiamato MUT (MultiUserTalk) che girava sulla BBS finlandese OuluBox. Jarkko Oikarinen trovò l'ispirazione dalla Bitnet Relay Chat che operava sulla rete Bitnet.
Per ovviare alle censure dei mezzi di comunicazione di massa, l'IRC venne utilizzato, sia durante il tentato colpo di Stato in Unione Sovietica, che durante la Guerra del Golfo. I registri delle conversazioni IRC in questi ed altri importanti eventi sono conservati nell'archivio Ibiblio.

## Informazioni tecniche

L'RFC 1459 descrive i protocolli di comunicazione utilizzati per l'IRC. Più recentemente l'IRC2 viene regolato dai documenti, RFC 2810, il RFC 2811, il RFC 2812 e il RFC 2813, che descrivono un insieme di proposte di estensione al modello IRC. Molte implementazioni IRC si basano sul IRC2 con vari add-on che superano le incompatibilità causate dalle differenze tra i software utilizzati per la gestione dei server di rete.
L'IRC è un protocollo di rete aperto che utilizza il protocollo di trasmissione TCP, e, opzionalmente il Transport Layer Security. Un server IRC, chiamato IRCd, è in grado inoltre di connettersi con altri server IRC, formando così una rete di comunicazione alla quale gli utenti accedono mediante un client. Molti server IRC non richiedono all'utente di autenticarsi, ma va comunque specificato un nickname univoco a livello della rete IRC.
L'IRC è un protocollo plaintext, questo significa che è possibile, anche se con qualche inconveniente, usarlo tramite una connessione socket di tipo raw. Tuttavia non vi è modo di definire il carattere di decodifica dei messaggi e dei nickname, rendendo impossibile il filtraggio di caratteri non-ASCII.

## Il "canale" IRC

Il mezzo di comunicazione in una sessione IRC è il "canale": un nome che identifica un gruppo di utenti. In tale contesto tutti gli appartenenti sono abilitati ad inviare messaggi, leggibili unicamente dagli utenti dello stesso gruppo. Un canale IRC si crea automaticamente nel momento in cui il primo utente vi acceda per la prima volta. I nomi dei canali appartenenti ad una rete IRC si identificano col carattere "#" (cancelletto) iniziale, mentre quelli locali, specifici di un server, sono identificati con il carattere "&". Per ovviare a problemi di desincronizzazione dei canali, quando dei server si scollegano, sono stati creati i canali "!" senza problemi di sincronismo, ma hanno ottenuto scarso successo.
Il primo utente che entra in un canale acquisisce automaticamente dei privilegi che può poi cedere a qualsiasi altro utente presente nel medesimo canale. Questi utenti vengono chiamati operatori di canale. Vi sono anche diversi utenti con privilegi differenti e con compiti di amministrazione della rete; questi sono chiamati IRC Operator o in italiano "operatori IRC". Nelle implementazioni più recenti è anche possibile registrare i canali, in modo che i diritti di accesso non vengano persi alla disconnessione dell'ultimo operatore; ove questo non sia possibile viene fatto uso di bot, programmi speciali che appaiono come normali utenti, ma che presidiano il canale e, all'uso, ri-conferiscono lo status di operatore ai proprietari.
Gli operatori possono impostare diverse opzioni su quel determinato canale (vedi b:IRC/Modi canale). Gli utenti nell'ambito del canale o del server possono avere diversi attributi (vedi b:IRC/Modi utente).
Le connessioni IRC sono un obiettivo privilegiato per i cracker, in quanto pur essendo cifrate necessitano, per la loro stessa natura, lunghi periodi di tempo di collegamento. È necessario pertanto assicurare a queste connessioni un'accurata politica di sicurezza in grado di proteggerle dagli attacchi di tipo script kiddie, che cercano di prenderne il controllo, magari tentando di sfruttare a proprio vantaggio un netsplit.
La connessione IRC viene spesso utilizzata da parte degli script kiddies come "laboratorio" per provare diversi tipi di attacchi in rete, per esempio inviando pacchetti ICMP mal formati, al fine di disturbarne gli utenti. Tuttavia, con l'entrata in scena, sia dei Bouncer, che dei virtual host, è molto difficile per queste persone malintenzionate portare a termine un attacco, visto che questi servizi riescono a nascondere l'indirizzo IP collegato ad un nickname.

## Reti di comunicazione

In tutto il mondo, ci sono diverse centinaia di reti IRC attive. Eseguono diverse implementazioni di server IRC, e sono amministrate da vari gruppi di Operatori IRC, ma tutti i protocolli utilizzati dagli utenti IRC presentano similitudini, per cui in tutte le reti IRC si può accedere col medesimo client senza problemi.
La differenza tra i vari network sta nella gestione delle implementazioni. IRCnet ad esempio è fedele all'implementazione storica di IRC e può essere definita la rete più anarchica, poiché non prevede alcun controllo dei nickname o dei canali. Al contrario altre reti hanno sviluppato sistemi per registrare i nickname o i canali debellando così l'uso di bot e i problemi causati dalle IRC War. Come in Usenet, i contenuti inviati sono immediatamente visibili da più siti e su tutti i server d'accesso, però, a differenza di Usenet, non sono più cancellabili. Una traccia delle discussioni è tenuta in file di log di pubblico dominio.
IRC offre, inoltre, le funzionalità tipiche delle chat più evolute: possibilità di creare profili-utente con dati personali, chattare, invio di messaggi privati, scambio di file, organizzare meeting della chat. Per individuare un'ora standard in tutto il mondo è stata scelta la convenzione UTC.

## Client IRC

* Piattaforme multiple: ChatZilla, Pidgin, jIRC, Nirc, XChat, KVIrc, irssi, Opera, Coolsmile, ejabberd, LimeChat, IRCCloud, Libera Chat
* Microsoft Windows: IceChat, Bersirc, dIRC, HydraIRC, Klient, mIRC, pIRCh, Trillian, vIRC, XiRCON, Miranda IM, Microsoft Comic Chat, ZRC
* Unix (-like): BitchX, epic, IIRC, IRCLL, WeeChat, Quassel (KDE), KVIrc, XChat, TalkSoup (GNUstep), Zircon, Konversation (KDE), Empathy, Pidgin (GNOME), HexChat
* Mac OS: X-Chat Aqua, Fire, IRCle, Minerva, Snak, ShadowIRC, Colloquy, MacIrssi
* AmigaOS: AmIRC
* iOS: colloquy
* Android: AndChat, Revolution Irc rilasciata secondo I termini della GNU General Public License Version 3
Le reti IRC hanno prodotto "client automatici" chiamati "bot", abbreviazione di "robot". Il primo fu scritto da Greg Lindahl e serviva da moderatore automatizzato per il gioco Hunt the Wumpus.
Quelli più recenti, tra tutti, eggdrop, sono invece usati per automatizzare la moderazione dei canali nelle reti sprovviste di servizi irc, anche se sono spesso solo di fastidio agli utenti. Sono di solito sviluppati in linguaggio Java e permettono uno standard di funzionalità che spaziano dall'invio di messaggi privati all'e-mail di utenti non connessi, all'apertura di chatroom private con utenti in linea, all'invio di emoticon all'interno dei messaggi.
Un'ulteriore evoluzione in campo di "bot" è sicuramente l'avvento di psotnic, un bot le cui velocità sono di gran lunga superiori a quelle di un eggdrop. Anch'esso è dotato di partyline, invio messaggi privati ed espansioni con script in c.

## IRC moderni

IRC ha subito una notevole evoluzione nel tempo. Software più recenti di gestione dei server hanno aggiunto nuove funzioni e caratteristiche.
* Services: sono servizi gestiti da "bot" che permettono la registrazione dei nickname (NickServ) e dei canali IRC (ChanServ), ma anche l'invio di messaggi per utenti non connessi in quel momento (MemoServ) o la gestione dei bot (BotServ).
* Extra Modes: I sistemi originali IRC usavano una serie di modalità standard, ora le nuove caratteristiche permettono di rimuovere i codici colore dai testi, o per nascondere un utente al fine di proteggerlo dagli attacchi di hacker malintenzionati (denial of service).
* Proxy Detection: molti server moderni implementano la possibilità di individuare e bloccare utenti che tentano di connettersi attraverso proxy o rete tor, spesso per compiere abusi del servizio (ad esempio "IRC War").