Advertisement
Guest User

Untitled

a guest
Jun 20th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.52 KB | None | 0 0
  1. #!/usr/bin/env perl
  2. # threaded socks proxy checker (public domain)
  3. # based on storm's (GNY) socks-valid.pl, RIP GNY
  4. #
  5. # usage; ./$0 <proxylist> <threads> <timeout>
  6. #
  7. use strict;
  8. use warnings;
  9. use IO::Socket;
  10. use threads;
  11. use threads::shared;
  12.  
  13. my $proxylist = $ARGV[0];       # input file
  14. my $validlist = "validlist";    # output file
  15. my $threads   = $ARGV[1] || 5;  # max threads
  16. my $timeout   = $ARGV[2] || 3;  # connection timeout
  17.  
  18. #-----------------------------------------------------#
  19.  
  20. open FILE, "<$proxylist" or die "[-] $!\n";
  21.     my @socks = <FILE>;
  22. close FILE;
  23.  
  24. my $total = scalar(@socks);
  25. my $valid :shared = 0;
  26.  
  27.  
  28. sub connect_sock($) {
  29.     our ($addr, $port) = split(/:/, shift, 2);
  30.     our $sock = IO::Socket::INET->new (
  31.         PeerAddr => $addr,
  32.             PeerPort => $port,
  33.         Proto    => 'tcp',
  34.         Timeout  => $timeout,
  35.     ) or warn "[-] $! ($addr:$port)\n";
  36.        
  37.     if ($sock) {
  38.         open VALID, ">>$validlist" or die "[-]$!\n";
  39.             print VALID "$addr:$port\n";
  40.         close VALID;
  41.         print "[+] Connected ($addr:$port)\n";
  42.         close $sock; $valid++;
  43.     }
  44.    
  45.     threads->self()->detach;
  46. }
  47.  
  48. sub cleanup {
  49.     sleep 1 while threads->list();
  50.     print "valid: $valid / $total\n";
  51. }
  52.  
  53. $SIG{'INT'} = sub {
  54.     print "\nCaught SIGINT, waiting for remaining threads...\n";
  55.     &cleanup();
  56.     exit 2;
  57. };
  58.  
  59.  
  60.  
  61. package main;
  62.  
  63. while (@socks > 0) {
  64.     if (threads->list() < $threads) {
  65.         our $l = shift(@socks);
  66.         if ($l =~ m/(\d+).(\d+).(\d+).(\d+):(\d+)/g) { 
  67.             $l =~ s/[\r\n]+//g;
  68.             threads->new(\&connect_sock, $l);
  69.         }
  70.     }  
  71. }
  72.  
  73. &cleanup();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement