Advertisement
overloop

check_port.pl

Jul 27th, 2014
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.24 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use IO::Socket::PortState qw(check_ports);
  6. use Net::IP;
  7. use threads;
  8. use threads::shared;
  9. use POSIX;
  10.  
  11. sub check_host_for_proxy {
  12.     my ($host) = @_;
  13.     my %ports = (tcp => {
  14.         8080 => {name => 'http_proxy'},
  15.         3128 => {name => 'squid_http'}
  16.     }, udp => {} );
  17.     my $timeout = 3;
  18.     check_ports($host,$timeout,\%ports);
  19.     my @open_ports = ();
  20.     foreach (keys %{$ports{'tcp'}}) {
  21.             push(@open_ports,$_) if $ports{'tcp'}->{$_}->{open};
  22.     }
  23.     return @open_ports;
  24. }
  25.  
  26. sub worker {
  27.     my @hosts = @_;
  28.     for my $host (@hosts) {
  29.         my @proxies = check_host_for_proxy($host);
  30.         STDOUT->printflush($host . ':' . $_ . "\n") foreach @proxies;
  31.     }
  32. }
  33.  
  34. if (scalar(@ARGV) < 1) {
  35.     print "usage: " . $0 . ' "ip_range"' . "\n";
  36.     print "example: " . $0 . ' "187.188.195.0 - 187.188.196.255"' . "\n";
  37.     exit(-1);
  38. }
  39.  
  40. my ($range) = @ARGV;
  41.  
  42. my $ip = new Net::IP($range);
  43. my @ips = ();
  44. do {
  45.     push(@ips,$ip->ip());
  46. } while (++$ip);
  47.  
  48. my $w = 10;
  49. my $n = scalar(@ips);
  50. my $m = ceil($n/$w);
  51.  
  52. for (my $i=0;$i<$w;$i++) {
  53.     my @worker_ips = splice(@ips,0,$m);
  54.     my $thr = threads->create('worker',(@worker_ips));
  55. }
  56.  
  57. print "miscalc" if scalar(@ips);
  58.  
  59. my @thrs = threads->list();
  60. $_->join() foreach @thrs;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement