[Perl] Black Proxer

Stato
Discussione chiusa ad ulteriori risposte.

imported_BlackLight

Utente Silver
16 Agosto 2007
211
8
1
98
Rilasciato il mio proxy HTTP in Perl. Il software si mette in ascolto su una porta (di default 8080), riceve connessioni HTTP da un client, le inoltra verso la legittima destinazione, legge le risposte e le re-invia al client. Il codice è relativamente semplice:

Codice:
#!/usr/bin/perl

use IO::Socket;

my $sd = new IO::Socket::INET(
        LocalPort => '8080',
        Proto => 'tcp',
        Listen => 1,
        Reuse => 1,
);

die "Impossibile creare il socket: $!\n" unless $sd;
open (OUT,">> log_proxy") or die "Impossibile scrivere su log\n";

while (1)  {
        my $new_sd=$sd->accept();
        my ($host,$port,$data);
        $port=80;

           print OUT localtime()."\n";
        print OUT "Connessione da ".$new_sd->peerhost()."\n";
        $pack='';

        while (<$new_sd>)  {
                $pack.=$_;
                last if ($pack =~ /\r\n\r\n/ or $pack =~ /\n\n/);
        }

        if ($pack =~ /Host:[\s]*([^\s]*)/)  {
                   $host=$1;
                   print OUT "Pacchetto inviato: $pack\n\n";

                   my $proxy = new IO::Socket::INET(
                           PeerAddr => "$host",
                           PeerPort => "$port",
                           Proto => 'tcp',
                   );

                   print $new_sd "Impossibile creare il socket: $!\n" && last if (!$proxy);
                   print $proxy "$pack\n\n";

                   while (<$proxy>)  {
                           print $new_sd $_;
                   }

                   close($proxy);
           }

           close($new_sd);
}

close ($sd);

Potete testarlo in locale, oppure testarlo 'sul campo'. Infatti è in esecuzione sul mio server, sulla porta 8080. Potete impostarlo come proxy mettendo nelle impostazioni di Firefox, o IE, o Opera l'indirizzo IP del mio server (attenzione, l'IP non il nome) sulla porta 8080.
 
Stato
Discussione chiusa ad ulteriori risposte.