Salta ai contenuti

IRCd e Maschere

L’IRCd

L’ircd (Internet Relay Chat daemon) è un’applicazione che permette di chattare tramite il protocollo IRC, su un server1. Senza addentrarci oltre questa definizione, possiamo intuire che, quando un utente si connette, si interfaccia con l’IRCd.

Come è strutturato IRC

IRC è un protocollo (mIRC, invece, è un client2). Quando ci colleghiamo alla chat, in realtà, ci stiamo collegando ad un singolo server della rete (nel nostro caso, IRCGate). Tutti i server della rete sono collegati fra loro, al fine di condividere informazioni ed offrire servizi. Una volta collegati al server, siamo online. In quanto online, siamo in grado, pur non essendo all’interno di un canale, di inviare messaggi e comandi al server e, di conseguenza, di comunicare con gli altri utenti3.

L’entrata in un canale (tramite il comando JOIN che vedremo di seguito), ci permette di vedere una lista di utenti presenti e di comunicare più agilmente con loro (mettersi a scrivere a nickname a caso, senza sapere se sono online, non ha grande senso, seppure è possibile!), nonché di creare canali tematici, adatti ad ogni esigenza. Vediamo qualche comando dell’IRCd.

Comandi dell’IRCd

L’ircd ci mette a disposizione diversi comandi. Di seguito ne riporto solo alcuni, che per ora ritengo di base:

  • JOIN: tramite il comando /join #nomecanale1[, #nomecanale2] è possibile entrare in uno o più canali. È la stessa cosa che fa mIRC, quando ci connettiamo ed entriamo automaticamente in alcuni canali, ci semplifica la vita e lo nasconde. Il comando, client permettendo, può essere inviato da qualsiasi sia la finestra attiva4.

  • PART: tramite il comando /part #nomecanale1[, #nomecanale2] è possibile uscire da uno o più canali, senza disconnettersi dal server. È la stessa cosa che fa mIRC automaticamente, quando cliccate con il tasto destro su un canale e lo chiudete.

  • QUIT: tramite il comando /quit, è possibile disconnettersi dal server a cui siamo connessi (e quindi, come spiegato prima, dalla rete). È ciò che fa mIRC, quando cliccate sul pulsante di “spegnimento” in alto a sinistra!

  • WHOIS: tramite il comando /whois nick, è possibile visualizzare alcune informazioni rilevanti e non, sull’utente preso in considerazione. Su mIRC è disponibile tramite click destro sul nick.

Come accennavo, questi sono solo alcuni dei tanti comandi che abbiamo a disposizione, di seguito riporto invece, la lista di comandi che ci mostrano i comandi disponibili:

  • /helpop ?usercmds
  • /helpop ?umodes (che vedremo nelle lezioni successive)
  • /helpop ?chmodes (che vedremo nelle lezioni successive)
  • Altri che non sono trattati in questo corso.

Se, ad esempio, siamo interessati a vedere come funziona il comando WHOIS e ad una sua descrizione, possiamo digitare il comando: /helpop ?whois.

Lasciamo all’utente il compito di informarsi sui seguenti comandi, e sul funzionamento, e sulla sintassi5: AWAY, WHO, USERHOST, USERIP, VERSION, CYCLE, LUSERS, PRIVMSG, WATCH, INVITE, ISON, NICK, NOTICE, KICK, TOPIC.

Tutti i comandi sono dell’IRCd?

La risposta, naturalmente, è no. Esistono infatti comandi disponibili solo sul vostro client (e quindi non necessariamente funzionanti ad altri utenti) ed aliases6. Un esempio di alias è GHOST, che vi sarà capitato di visualizzare in prima pagina, appena aprite il Tux`Script. GHOST è infatti il raggruppamento di più comandi: disconnette il vecchio nick, aspetta qualche secondo tramite un comando del client e, infine, cambia il vostro attuale nickname nel vecchio (tramite il comando NICK) per poi identificarsi tramite un comando dei services (che vedremo nelle ultime lezioni).

Le maschere

Maschere: un’introduzione

Riprendendo il comando WHOIS, che abbiamo appena visto, introduciamo il concetto di maschera (più comune come “mask” in inglese). Una maschera è completa quando rispetta la seguente sintassi: nick!ident@host. Notiamo subito, che, per comodità, il protocollo IRC, divide il nick, dall’ident tramite un punto esclamativo e, allo stesso modo, divide l’ident, dall’host, con una chiocciola. Le informazioni presenti in una maschera, ci permettono di identificare, seppur non necessariamente in maniera univoca, un utente.

La sintassi nick!ident@host, infatti, significa: l’utente che ha il nick uguale a nick E l’ident uguale a ident E l’host uguale a host, è quello che sto prendendo in considerazione, tutti gli altri, sono scartati e non mi interessano per l’azione che sto compiendo con la maschera.

Peculiarità di una maschera

La maschera, oltre a poter essere formata, in maniera completa, da nick, ident e host, permette una gestione più avanzata, tramite l’utilizzo di wildcards, altresì detti “caratteri jolly”. I caratteri jolly disponibili sono il ? (punto di domanda) e il * (asterisco). Per ora ci limitiamo a dire che il punto di domanda sostituisce uno ed un solo carattere, mentre l’asterisco sostituisce zero o infiniti caratteri. Vediamo un esempio: la parola mar? potrebbe significare: marA, marE, marI, marM, marF, …, ma NON marEA, marAA, mar…

Perché ci interessano le maschere?

Le maschere ci interessano per molti motivi, per quanto riguarda questo corso, ci interessano principalmente per bannare, impostare eccezioni ed inviti. Discuteremo di queste cose, nelle prossime lezioni. Vi invito ad esercitarvi su parole (per le maschere è ancora presto), sostituendo zero o più caratteri grazie all’ausilio dei caratteri jolly appena visti.

Log della Lezione in Classe

~MyWay: Anzitutto iniziamo con il vedere un pochino come funzionano le cose qui in chat.

Ci sono dei server connessi tra loro, che formano la rete Orixon. Quando un utente si connette, non fa altro che collegarsi ad uno di questi server su cui è in funzione un programma, detto ircd.

@newmoon: Eccomi.

%Jerod: Si.

~MyWay: Affinché il programma che “gira” (gergo) sul server e il client (programma con cui chattano) degli utenti possano capirsi, è necessario un protocollo. Un protocollo è un insieme di regole comuni, un po’ come la lingua italiana. Alla parola “CIAO”, associamo tutti lo stesso significato e per tal motivo riusciamo a capirci. Così lo stesso per questi due programmi. Il protocollo (ovvero la lingua che parlano) è IRC.

Una volta che l’utente si collega ad uno di questi server su cui gira l’ircd, è nello stato di online. Per cui per essere online non serve sostare in alcun canale. Possiamo inviare comandi all’ircd e quindi anche comunicare con gli altri (/msg Jerod ciao).

Ora, poiché stare online senza sapere chi altro c’è online e quindi non poter comunicare, non è utile (almeno ai nostri fini), sono stati inventati i canali. All’interno di un canale è possibile scrivere in comune e vedere gli altri utenti che vi sostano all’interno.

Per entrare in un canale, si usa il comando JOIN (quindi la parola JOIN fa parte del protocollo IRC, un po’ come CIAO della lingua italiana). Per cui quando siamo dal tux`script e premiamo due volte su un canale per entrarci, mirc altro non sta facendo che tradurre quel click in /JOIN #ChatGratis. Allo stesso modo, per uscire c’è il comando /PART, che permette di lasciare un canale, mentre il comando /QUIT permette di disconnettersi dal server (e quindi dalla rete).

Un altro comando molto interessante che approfondiremo meglio nelle prossime lezioni è il comando /WHOIS (chi è?). Che permette di avere informazioni dettagliate su un utente.

Chiaramente il protocollo IRC è molto più vasto e ci sono tanti altri comandi, per cui sono disponibili una serie di comandi per accedere alle “guide online”. Ad esempio se digitate /helpop ?uerscmds potete vedere questi comandi citati finora. Se volete conoscere nello specifico il funzionamento o le peculiarità di un comando, potete digitare /helpop ?nomecomando (ES. /helpop ?JOIN ).

Ogni messaggio che inviamo, prima di arrivare all’utente, passa per il server. Per cui abbiamo una situazione di questo tipo: Utente1 -> Server -> Utente2. Se l’utente 2 risponde: Utente2 -> Server -> Utente1.

Tuttavia, l’ircd non è l’unico oggetto con cui comunichiamo, esistono anche altri programmi, in aggiunta all’ircd, che permettono di usufruire di alcune funzionalità aggiuntive. I services ne sono un esempio; quando vi collegate e vi identificate, non state facendo altro che inviando un messaggio privato ad un utente particolare, che si chiama NICKSERV, che è un programma affiancato all’ircd, che permette di riconoscervi e collegarvi al vostro account, cosa che altrimenti non avreste potuto fare. Infatti in origine, questi meccanismi aggiuntivi non erano previsti e potevano accadere una serie di disguidi (immaginate il proprietario di un canale non identificabile…). Per chi è interessato ad uno dei motivi dell’aggiunta dei services, può cercare su google alla voce “IRC TAKEOVER”.

Ora, dicevamo che uno dei comandi che ci interessano maggiormente, in quanto moderatori, è il WHOIS. Per fare il whois potete fare /whois nick oppure click destro sul nick di un tizio random e premere whois.

Jerod è Jerod![email protected] Nome vero per Jerod: Colloquy User Informazioni su Jerod: is using modes +irxt Jerod è autenticato come: Jerod Jerod è nei canali: +#ChatGiochi, +#ChatGratis, %#corsomod Il server di Jerod: genesi.orixon.org - IPv6/IPv4 IRC Server by fred Il tempo di inattività di Jerod: 0d 0h 11m 46s Orario di accesso di Jerod: sab mag 4 11:32:06 2013 Informazioni WHOIS per Jerod ricevute da genesi.orixon.org

~MyWay: Oggi il soggetto selezionato è… Jerod. Jerod![email protected]. Nella prima riga del whois, vediamo quella che viene chiamata “maschera”. La maschera è composta da 3 parti, nickname!ident@host-criptato. Ora, sul nickname immagino non abbiate dubbi. È quello che scegliete voi. L’ident, allo stesso modo, è una parola che scegliete voi di massimo 10 caratteri. L’host, invece vi viene assegnato dall’ISP quando vi collegate ad internet (sarebbe l’IP sostanzialmente), affinché gli altri non possano risalire al vostro ip, questo host viene criptato. Inoltre, (sempre tramite i services) c’è la possibilità, come nel caso di Jerod, di avere un host personalizzato che in gergo viene chiamato VHOST (host virtuale). Il vhost viene gestito da HOSTSERV (tutti i services terminano in SERV). Per cui quando vi identificate tramite nickserv, subito dopo hostserv vi mette l’host virtuale che avete scelto, che va a finire sopra il vostro host originale. Perché ci interessano tanto le maschere? Perché tramite queste “costruiamo” ban, eccezioni, inviti e tante altre belle cose. Ora prendiamo come esempio i ban

, per capire come funzionano. Se io volessi bannare Jerod, dovrei impostare un ban sulla sua maschera e quindi su Jerod![email protected]. Ora, senza entrare nel dettaglio di come si fa, visto che tanto lo vedremo nelle prossime lezioni, cerchiamo di capire come avviene la “lettura” della maschera, da parte dell’ircd. Scrivere Jerod![email protected] per l’ircd significa dire: prendi quell’utente tale che ha queste proprietà:

  • come nick ha jerod E
  • come ident ha jerod E
  • come host ha vop.chatt-gratis.net

Solo se queste tre condizioni sono verificate contemporaneamente, allora la maschera ha effetto. Questo tipo di maschera, formata da tutti e 3 i parametri, si chiama maschera completa. Conoscerla è una buona cosa, ma come potete immaginare, non è comoda, perché? Perché se io imposto un ban su tutta quella roba, poiché tutte e 3 le condizioni devono essere soddisfatte, se Jerod cambia il nick, rientra, perché una delle 3 non è più soddisfatta.

@newmoon: Ospegni il modem.

~MyWay: A questo fine, i creatori, hanno pensato di permettere l’utilizzo dei caratteri jolly. Un carattere jolly, è un simbolo particolare, che permette di sostituire uno o più caratteri. In particolare, nelle maschere, questi simboli speciali sono soltanto due:

  • uno è il ?
  • l’altro è *

Il punto interrogativo, sostituisce un solo carattere. L’asterisco invece, sostituisce da 0 a n (“infiniti”) caratteri. Chiaramente questi simboli restano delimitati alla loro zona. Cioè se io metto l’asterisco al posto di Jerod, _![email protected], non è che questo funziona anche dopo il ! Perché il ! delimita lo spazio d’azione, avvisa l’ircd che subito dopo inizia l’ident. Per cui il simbolo non ha più effetto da lì in poi. Pertanto dovrò usarne un altro: _!*@vop.chatt-gratis.net. E in questo modo non sto facendo altro che dire:

  • qualsiasi nick
  • qualsiasi ident
  • a patto che abbia come host vop.chatt-gratis.net

In questo modo, come potete immaginare, si riescono a fare “accoppiate” un po’ più potenti. Ora, in genere per chi non ha mai visto le maschere, è difficile entrare nell’ottica, per cui fino alla prossima lezione faremo esercizi su questa cosa e cercheremo di approfondirla il più possibile. Intanto avete domande fin qui?

%Jerod: Si una.

~MyWay: Dicci Jerod.

%Jerod: Posso mettere un * o un ? anche sull’host?

~MyWay: Sì certo, puoi metterlo in qualsiasi parte della maschera.

%Jerod: Ok.

~MyWay: Vediamo qualche esempio. Se io scrivo pro* cosa sto rappresentando? Tutte le parole che iniziano con PRO e proseguono come vogliono, poiché dopo c’è un asterisco che dice “qualsiasi sequenza di caratteri”.

%Jerod: Pro e tutti gli altri caratteri possibili.

@newmoon: Prodotto.

~MyWay: Quindi PROva, PROdototto, PRO (senza nient’altro), PROfugo, etc.

%Jerod: Protuberanza. Ok.

@newmoon: Max 10 caratteri.

~MyWay: Questo dipende da dove lo metti. Se lo metti nell’ident sì, sono massimo 10. Altrimenti no, in generale sono “infiniti”.

%Jerod: Ah ecco.

~MyWay: I simboli jolly quindi sono molto comodi, d’altra parte però bisogna fare attenzione. Notate che se imposto male l’uso del carattere jolly, oltre a bannare protuberanza, faccio bannare anche prodotto, profugo, etc.

%Jerod: Quindi un !@* non entra più nessuno.

~MyWay: Per cui bisogna imparare a creare delle maschere che si avvicinino quanto più possibile all’obiettivo, minimizzando però i danni. Esattamente.

%Jerod: Ok capito.

~MyWay: Da notare che se metto l’asterisco all’inizio della parola, allora sto impostando la maschera su un SUFFISSO. Se lo metto alla fine, un PREFISSO. Se lo metto a inizio e fine, sto dicendo che una data parola deve stare al centro. MON. Attenzione però, che * significa anche nessun carattere. Quindi questa prende MONdo, amMONiaca, etc. aMON e così via.

%Jerod: Ok.

Esercizi

Ai candidati moderatori si chiede di costruire una o più maschere (il numero minimo di maschere necessarie) per fare il matching di:

  1. tutti gli utenti che hanno un nickname che termina in “gene”;
  2. tutti gli utenti che hanno l’ident uguale a “cgiirc”;
  3. tutti gli utenti che hanno l’host che termina in “.telecomitalia.it”;
  4. tutti gli utenti che hanno un ident lungo 9 caratteri;
  5. tutti gli utenti che hanno un ident più corto di 10 caratteri, tranne quelli da 5 caratteri (quindi [1..4] e [6..9]), l’hostname che termina in .telecomitalia.it e il nickname che termina in “_j”.

Si richiede inoltre di descrivere a cosa servono i seguenti comandi e di spiegare come si usano:

  1. userhost
  2. userip
  3. away
  4. who
  5. version
  6. cycle
  7. lusers
  8. privmsg
  9. watch
  10. invite
  11. ison
  12. nick
  13. notice
  14. kick
  15. topic
Soluzioni
  1. *gene!*@*
  2. *!cgiirc@*
  3. *!*@*.telecomitalia.it
  4. *!?????????@*
  5. Questo va fatto tramite l’uso di più maschere. In questo modo possiamo spezzare una regola che altrimenti non potremmo fare, in più regole distinte: infatti possiamo ottenere gli ident più corti di 10, (tranne quello di lunghezza 5) tramite l’uso di 8 maschere: *_j!?@*.telecomitalia.it, *_j!??@*.telecomitalia.it, *_j!???@*.telecomitalia.it, *_j!????@*.telecomitalia.it, *_j!??????@*.telecomitalia.it, *_j!???????@*.telecomitalia.it, *_j!????????@*.telecomitalia.it, *_j!?????????@*.telecomitalia.it In questo modo, per fare un parallelo, è come se avessimo sfruttato l’unione insiemistica (con una regola non sono in grado di impostare una maschera che prenda quelli da 1 e quelli da 2, ma tramite l’unione di due maschere, sì).

Altri Esercizi

Se le maschere continuano a sembravi arabo, vi invito a produrre la soluzione (sempre tramite l’uso di maschere minimali), per fare il matching di:

  1. Tutti gli utenti che hanno l’host criptato che inizia con “118FAAD.”;
  2. Tutti gli utenti che hanno l’host criptato che termina con “.ip173.fastwebnet.it”;
  3. Tutti gli utenti che hanno l’ident che termina con “_j” e l’host che termina con “.retail.telecomitalia.it”;
  4. Tutti gli utenti che hanno l’ident lungo 10 caratteri che termina con “_j” e l’host che termina con “.retail.telecomitalia.it”;
  5. Tutti e soli gli utenti che hanno il nickname che contiene, in maniera non necessariamente continua, ma nell’ordine dato, questi caratteri: ‘a’, ‘z’, ‘z’, ‘u’, ‘r’, ‘r’, ‘a’

Note

Footnotes

  1. Computer costantemente connesso a internet.

  2. Programma utilizzato dall’utente per connettersi.

  3. Tutte le comunicazioni, siano esse nel canale, o in privato, non passano direttamente da utente a utente, bensì attraverso il server, che quindi è sempre nostro intermediario. Ciò ha pro e contro.

  4. La finestra attiva è la finestra in cui ci troviamo.

  5. La sintassi è la branca della linguistica che studia i diversi modi in cui le parole si uniscono tra loro per formare una proposizione ed i vari modi in cui le proposizioni si collegano per formare un periodo. Nel nostro caso intendiamo il modo corretto in cui unire le parole, per formare un comando funzionante! Ad esempio, /whois Consuelo è un comando corretto, perché rispetta la sua sintassi, a prescindere dall’esito dato dal comando.

  6. Abbreviazione o raggruppamento, in un solo comando, di uno o più comandi.