![]() |
Clone Scanner | |
"Come posso scrivere un clone scanner" è una delle domande che più frequentemente ho visto pubblicate su vari siti. È anche un esempio di come la maggior parte di utenti riescano ad utilizzare adeguatamente i loro due strumenti più importanti: il file di help di mIRC ed i loro propri cervelli. In ogni modo, iniziamo... Prima di poter scrivere uno Script per il clone scanner bisogna essere sicuri di sapere esattamente cosa è un clone. Cosa sono i cloni? Sono semplicemente connessioni multiple dallo stesso host (si ricordi che un host è la parte di indirizzo dopo il segno @). Ah, qui il primo indizio: l'indirizzo. Ora, come possiamo noi vedere l'indirizzo di qualcuno? Domanda abbastanza semplice, chiunque abbia avuto qualche esperienza con lo scripting conoscerà l'identificatore $address. Per chi non ne fosse a conoscenza la traduzione da "address" (indirizzo) ad "$address" è piuttosto ovvia... Questa fase è importante. Rivela il segreto più importante del tutto dello scripting in mIRC. /help $address Il file di Help praticamente quasi vi rivela come scrivere lo Script, Si guardi la voce $mask per i tipi di indirizzi che si possono usare e si ricordi che siamo soltanto interessati ad un host corrispondente. Così dovreste individuare subito che quello *!*@host.dominio è la mask corretta, che è la mask di tipo 2. Trovare i Cloni Dopo, sappiamo che la cosa importante è che esiste più di un collegamento da quell' host. Come si faccia questo è un po' più ingannevole ed ammetto che questa parte dell'operazione non è qualcosa che salti prontamente dall' helpfile. Potete pensare di fare un ciclo di confonrti tra $$address ad altri $$address-es, ed in effetti non c'e' nulla di sbagliato in questo. Tuttavia, il modo migliore è lasciare che il mIRC faccia il lavoro duro per voi. Essite infatti un identifier che permette di sapere "quanta gente ha questo host", e se il numero è maggiore di 1, avete un clone. Quell'identifier è $$ial. Il normale clone scanner farà uno scan solo un canale, così si può preferire il comando $$ialchan e ricordarsi che lo script standard, che usa 0 nel campo N vi dà il conto totale.Passiamo ad un po' di codice. Controllare un nick. %host_to_search_for = $address(nick,2) %number_from_that_host = $ialchan(%host_to_search_for,chan,0) if (%number_from_that_host > 1) { ;we have clones! ;first set up our vars and loop var %count = 0 unset %clones :loop inc %count ;loop through every nick, adding the nicks to %clones %clones = %clones $ialchan(%host_to_search_for,chan,%count).nick if (%count < %number_from_that_host) { goto loop } echo -a The clones were %clones } Controllare un canale. Naturalmente, quel codice ha funzionato soltanto per un nick. noi invece vogliamo che vengano controllati tutti i nick nel canale. Ciò è (si spera) evidente - basta fare un ciclo di loop attraverso $$nick fino a che non otteniate il risultato di tutti i nick. (proprio come $$address). Per ciascun $$nick che controlliamo, dovremo effettuare il "ciclo interno" codificato sopra. alias clonescan { ;$1 is the channel to scan var %count1 = 0 :outer_loop inc %count1 ;now $nick($1,%count) is the nick to check ;the following code is just like that above, but smaller if ($ialchan($address($nick($1,%count1),2),$1,0) > 1) { var %clones, %count2 = 0 :inner_loop inc %count2 %clones = $ialchan($address($nick($1,%count1),2),$1,%count2).nick if (%count2 < $ialchan($address($nick($1,%count1),2),$1,0)) { goto inner_loop } echo -a These are clones: %clones } ;now just go to the next nick if there are any more if (%count1 < $nick($1,0)) { goto outer_loop } } Problemi Noterete certamente alcuni problemi esaminando un certo alias in un canale con vari cloni. Se che Joe è un clone di Jack, allora Jack è un clone di Joe. Questo significa che si innesca due volte: Questi sono i cloni: Jack Joe Questi sono i cloni: Joe Jack Non così buono. Come possiamo riparare a ciò? Semplice... basta applicare un po' di logica! Avrete bisogno di ricordare l'indirizzo appena controllato e se lo troverete di nuovo non applicare il ciclo interno. |