#!/usr/bin/perl use Socket; use IO::Socket; use Net::SOCKS; use threads; use threads::shared; my ($host, $port) = @ARGV; mfunc(); $port = 1080; mfunc(); $port = 80; mfunc(); for my $lthrd (1..7){ my $nthrd = threads->new(\&mfunc); foreach (threads->list){ $_->join; } } $port = 22; mfunc(); sub mfunc{ eval { local $SIG{ALRM} = sub { die "alarm\n" }; # NB \n required alarm 7; my $sock = new Net::SOCKS(socks_addr => $host, socks_port => $port, protocol_version => 4); my $rsocks = $sock->connect(peer_addr => 'www.google.com', peer_port => 80); my $status = $sock->param('status_num'); if ($status == SOCKS_OKAY){ print "\nWorked $host:$port\n"; $sock->close(); } alarm 0; }; die if $@ && $@ ne "alarm\n"; # propagate errors if ($@) { print("\nTimeout $host:$port\n"); } }