Testare una lista di proxy in Perl con i threads

INPUT FILE NAME: proxy
INPUT FILE FORMAT: 1 IP:PORTA per ogni riga del file

OUTPUT LOG FILE NAME: proxy.log

VARS:
$nn -> numero di richieste per volta
$timeout -> tempo massimo di attesa per le $nn richieste

SOURCE: http://pastebin.com/8GejbgjD

#!/usr/bin/perl -w
use threads;
use WWW::Mechanize;

$nn = 25; # number of simultaneous connections
$timeout = 10; # proxy request timeout (secs)

sub start_thread {
        my @args = @_;
	my $go = WWW::Mechanize->new( agent=> "Mozilla/5.0", timeout => $timeout);
	$go->proxy(['http'], 'http://'.$args[0].'/');
	print "Testing: ".$args[0]."\n";
	eval {
 	 $go->get('http://automation.whatismyip.com/n09230945.asp');
	};
	if ($@) { return; }
	$match = $go->content;
	my($crap,$ip)=split(/^(.*):/,$args[0]);
	if ($match =~ /$ip/) {
		open(LOG,">> proxy.log"); print LOG $args[0]."\n"; close(LOG);
		print "======> UP $args[0] <=======\n";
	}
}

@proxy=`cat proxy`;
$n = 0;
foreach $i (@proxy) {
chomp($i);
$thr[$n] = threads->create('start_thread', $i);
$n++;
if ($n == $nn) {
 `sleep $timeout`;
 for ($x=0; $x<$nn;$x++) {
  $thr[$x]->join();
 }
 $n = 0;
}

}

Cambiare lo stato su Twitter con Net::Twitter

Utilizzando Net::Twitter è piuttosto semplice inviare un nuovo stato (twit), l’unico inconveniente è che bisogna procurarsi le chiavi necessarie per l’overauthentication. Da non molto twitter ha disabilitato la possibilità di fare il login in chiaro con i propri username e password.

Per ottenere le chiavi:

  • andate su https://dev.twitter.com/ ed effettuate il login
  • creare una nuova applicazione
  • tra le impostazioni dell’applicazione modificate i diritti di accesso ed impostare su “Read, Write and Access direct messages”

  • ora tra i dettagli dell’applicazione generate l’Access Token

  • appena generati siete pronti per copiare Consumer Key, Consumer Secret, Access Token e Access Token Secret nello script in perl
#!/usr/bin/perl -w

use Net::Twitter;
$input = "Nuovo stato da pubblicare : )";

$ckey = "-----";
$csec = "------";
$atok = "------------------";
$asec = "-----------";

my $nt = Net::Twitter->new(
    traits              => [qw/API::REST OAuth/],
    consumer_key        => $ckey,
    consumer_secret     => $csec,
    access_token        => $atok,
    access_token_secret => $asec,
);

$nt->update($input);

Controllo posta in arrivo in perl con Mail::IMAPClient

Ecco un esempio per il controllo della posta in arrivo utilizzando Mail::IMAPClient
Viene effettuata una connessione al server di gmail per ottenere il numero identificativo dell’ultima mail ricevuta, e restituire, ogni qualvolta ci sia una nuova mail in arrivo (con controlli ciclici di 60 sec), il campo oggetto delle nuove mail.

#!/usr/bin/perl -w

use Mail::IMAPClient;

my $imap = Mail::IMAPClient->new(
 Server   => 'imap.gmail.com',
 Port     => 993,
 Ssl      => 1,
 User     => '[email protected]',
 Password => 'password',
 )
 or die "new(): $@";

print "I'm authenticated\n" if $imap->IsAuthenticated();

$imap->select("INBOX") or die "Could not select: $@\n"; # seleziona la posta in arrivo
$imap->Uid(1);
@msg = $imap->messages or die "Could not messages: $@\n";
$mcount = @msg."";

$lastuid = $msg[$mcount-1];

print $lastuid."\n";
$imap->close;

while(1) {

 print "Checking...\n";
 my $imap = Mail::IMAPClient->new(
  Server   => 'imap.gmail.com',
  Port     => 993,
  Ssl      => 1,
  User     => '[email protected]',
  Password => 'password',
  )
 or die "new(): $@";

 $imap->select("INBOX") or die "Could not select: $@\n";
 $imap->Uid(1);
 @msg = $imap->messages or die "Could not messages: $@\n";
 $mcount = @msg."";

 $uid = $msg[$mcount-1];

 for ($i=$lastuid+1; $i<=$uid; $i++) {
  $resp = $imap->subject($i);
  if (defined($resp) && (length($resp)>1)) {
  #oggetto mail in $resp
  }
 }

 $lastuid = $uid;

 $imap->close or die "Could not close: $@\n";
 `sleep 60`;
}