Untitled Document
mIRC in Italiano - Script - Forum - Imposta come Home Page - Aggiungi ai Preferiti - Home - Chat
Utenti connessi: - Visitatori oggi: - Visitatori totali: - Pagine viste oggi:


NewsLetter


localmirc
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----

-
----
-
-
-
-
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----
-
----

----
Bouncer locale con i sockets
I Con questo tutorial vogliamo illustrarvi un metodo per far connettere un utente ad irc usando il vostro host invece che il suo; contemporaneamente andremo ad approfondire alcuni aspetti dei sockets.

Questo metodo può tornarvi utile se, per esempio, un vostro amico viene bannato ingiustamente da un canale e voi volete farlo rientrare… Moralmente non e’ proprio corretto, ma spesso non lo e’ nemmeno l’abuso che gli operatori fanno dalla propria @.
Tutto il procedimento è realizzato usando le funzioni sockets che il mIRC ci mette a disposizione, si consiglia di leggere prima la guida sui sockets presente sul sito.

;---- INIZIO CODICE ----
alias av_bnc socklisten $iif($1,-d $1,) bouncer 6667 | window @debug

on *:socklisten:bouncer:{
sockaccept bnc
sockmark bnc INDEX1
}

on *:sockread:bnc:{
if ($sockerr > 0) { echo -a Connessione fallita | return }
var %tempbnc
sockread %tempbnc
if (%tempbnc) {
echo @debug CLIENT: %tempbnc
if ($sock($sockname).mark == INDEX1) {
%stringa_bnc_nick = %tempbnc
sockmark bnc INDEX2
halt
}
if ($sock($sockname).mark == INDEX2) {
%stringa_bnc_user = %tempbnc
sockmark bnc CON
sockwrite -n bnc In attesa di connessione: $+ $crlf $+ server: $server $+ $crlf $+ porta: $port
sockmark $sockname CON
sockopen server_bnc $server $port
halt
}
}
}

on *:sockopen:server_bnc:{
sockwrite -n $sockname %stringa_bnc_nick
sockwrite -n $sockname %stringa_bnc_user
}

on *:sockread:server_bnc:{
if ($sockerr > 0) { echo -a Connessione fallita | return }
var %rcv
sockread %rcv
if (%rcv) echo @debug SERVER: %rcv
sockwrite -n bnc %rcv
}
;----- FINE CODICE -----


Spegiamo passo passo i vari blocchi di codice che ci interessano:

L’alias iniziale, chiamato av_bnc, mette in ascolto la porta locale 6667 e crea una finestra chiamata @debug; questa finestra avrà il compito di monitorare tutto quello che accade tra il server e l’utente che si collega. La sintassi per avviare il bouncer è: /av_bnc oppure /av_bnc 192.168.1.10 se si vuole bindare un ip specifico.

on *:socklisten:bouncer:{
sockaccept bnc
sockmark bnc INDEX1
}

Quando un utente tenta di connettersi sulla porta 6667 del vostro ip, lo script accetta in automatico la connessione e gli attribuisce il nome BNC, successivamente marca la connessione appena creata con una “etichetta” chiamata INDEX1.
Sorvoliamo la parte iniziale dell’evento sockread, spiegato negli altri tutorial, ed andiamo a analizzare la seguente parte:

if (%tempbnc) {
echo @debug CLIENT: %tempbnc
if ($sock($sockname).mark == INDEX1) {
%stringa_bnc_nick = %tempbnc
sockmark bnc INDEX2
halt
}
if ($sock($sockname).mark == INDEX2) {
%stringa_bnc_user = %tempbnc
sockmark bnc CON
sockwrite -n bnc In attesa di connessione: $+ $crlf $+ server: $server $+ $crlf $+ porta: $port
sockmark $sockname CON
sockopen server_bnc $server $port
halt
}

Quando un client IRC si collega ad un server irc, gli spedisce due stringhe essenziali per la connessione, ossia NICK ed USER (e i rispettivi parametri).
Noi andremo ad estirpare queste due sequenze di dati grazie al parametro “mark”.
In precedenza, come ricorderete, abbiamo marcato la connessione con il valore INDEX1.
Adesso useremo questo valore per identificare la prima ricezione di dati che andremo a salvare nella variabile %stringa_bnc_nick, una volta salvato marchiamo la connessione con il valore di INDEX2, ed aspettiamo il secondo invio di dati da parte del client, che salveremo nella variabile %stringa_bnc_user.
Terminato anche questo processo marchiamo la connessione con il valore CON.
A questo punto lo script apre una connessione con il server a cui siamo collegati…
Nello stesso evento troviamo il codice:

if ($sock($sockname).mark == CON) {
sockwrite -n server_bnc %tempbnc
}

Da questo momento in poi ogni dato ricevuto viene inviato direttamente alla connessione appena creata e chiamata server_bnc.
Come vedete abbiamo usato il mark per dividere i diversi stati della connessione a nostro piacimento, la stessa strategia può tornate utile in connessioni, per esempio, di tipo “login” o registrazione, ossia in tutti quei casi dove e’ necessario monitorare il susseguirsi di informazioni ricevute o inviate.

Nell’ultima parte troviamo:

on *:sockread:server_bnc:{
if ($sockerr > 0) { echo -a Connessione fallita | return }
var %rcv
sockread %rcv
if (%rcv) echo @debug SERVER: %rcv
sockwrite -n bnc %rcv
}

La spiegazione di quest’ultimo passo è superflua (tutorial sockets per maggiorni info), l’unica cosa da notare e’ come la connessione server_bnc, ossia quella collegata col server, non faccia altro che ricevere dati, salvarli nella variabile e poi spedirli alla connessione bnc, ossia quella creata con il nostro ipotetico amico.

Il codice e' testato e funzionante, ma e' stato creato per essere parte integrante di un tutorial e non di un addon o simili.
Per chi volesse utilizzarlo per fini diversi da quello per cui e' nato, si consiglia di aggiungere alcune opzioni importanti, come per esempio la possibilita' di gestire piu' utenti, proteggere la connessione con password e/o gestire la connessione con comandi rapidi di chiusura e apertura.

Guerrjero
www.tuttoirc.it




  Ultime dal forum mIRC Scripting

Vai al forum
Ultimi script e addon inseriti
Diablo III (14624)
Fancazzista Scr... (18764)
Sensuality scri... (7622)
Grand Theft Aut... (5154)
Stealth Script ... (8382)
-SagittarioScri... (18835)
Paradise Script (13753)
Trivia Game 200... (11882)
Ircap Script 8.... (5191)
RawScript 2.0 (8481)


 

 



Cerca nel sito

Le ultime news:



Sondaggio
Cosa vorresti di nuovo?

Risultati | Archivi

Statistiche Download
Database:
283 Files
241 Mb
Scaricati:
2659868 Files
Totale: 5615348Mb

Upload
Hai realizzato uno Script? Una addon? Una tcl? Un articolo? Qualsiasi cosa? Mandacelo ora! Utilizza il form upload per inviarci il tuo materiale e se lo riteniamo idoneo lo vedrai pubblicato nel portale!
[ Upload ]

Chat
Inserisci il tuo nick:



| Contattaci | Pubblicità | Staff |
Il presente materiale è Copyright TuttoIRC.it 2005. Leggi il Disclaimer