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:
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.
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.