Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use strict;
- use warnings;
- use IO::Socket::PortState qw(check_ports);
- use Net::IP;
- use threads;
- use threads::shared;
- use POSIX;
- sub check_host_for_proxy {
- my ($host) = @_;
- my %ports = (tcp => {
- 8080 => {name => 'http_proxy'},
- 3128 => {name => 'squid_http'}
- }, udp => {} );
- my $timeout = 3;
- check_ports($host,$timeout,\%ports);
- my @open_ports = ();
- foreach (keys %{$ports{'tcp'}}) {
- push(@open_ports,$_) if $ports{'tcp'}->{$_}->{open};
- }
- return @open_ports;
- }
- sub worker {
- my @hosts = @_;
- for my $host (@hosts) {
- my @proxies = check_host_for_proxy($host);
- STDOUT->printflush($host . ':' . $_ . "\n") foreach @proxies;
- }
- }
- if (scalar(@ARGV) < 1) {
- print "usage: " . $0 . ' "ip_range"' . "\n";
- print "example: " . $0 . ' "187.188.195.0 - 187.188.196.255"' . "\n";
- exit(-1);
- }
- my ($range) = @ARGV;
- my $ip = new Net::IP($range);
- my @ips = ();
- do {
- push(@ips,$ip->ip());
- } while (++$ip);
- my $w = 10;
- my $n = scalar(@ips);
- my $m = ceil($n/$w);
- for (my $i=0;$i<$w;$i++) {
- my @worker_ips = splice(@ips,0,$m);
- my $thr = threads->create('worker',(@worker_ips));
- }
- print "miscalc" if scalar(@ips);
- my @thrs = threads->list();
- $_->join() foreach @thrs;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement