Perl port scanner, probleme de thread

Fermé
Om3g4 - 7 mars 2004 à 12:07
 MHD - 19 nov. 2008 à 21:21


#!/usr/bin/perl
use IO::Socket::INET;
my $TIMEOUT = 10;

printf "*****************************************\n";
printf "* UnderAttack *\n";
printf "* By Om3g4 *\n";
printf "*****************************************\n";

if (! defined $ARGV[1]) {
printf "\nUsage: UnderAttack [TARGET] <OPTS>\n\n";
printf "Target Options:\n";
printf "[-I] --> Target IP Range\n";
printf "[-F] --> Target IP File\n\n";
printf "Options:\n";
printf "<-P> --> Ports To Scan\n";
printf "<-T> --> Thread (default = 10)\n";
printf "<-O> --> Output File\n";
exit 0; }

for (my $x=0;$x<=$#ARGV;$x++) {
if (@ARGV[$x]=~/\-i/) { @TARGET = make_ip(@ARGV[$x+1]); }
if (@ARGV[$x]=~/\-f/) { @TARGET = make_ip(@ARGV[$x+1],10); }
if (@ARGV[$x]=~/\-p/) { @PORTS = make_ports(@ARGV[$x+1]); }
if (@ARGV[$x]=~/\-t/) { $THREAD = @ARGV[$x+1]; }
if (@ARGV[$x]=~/\-o/) { $OUTPUT = @ARGV[$x+1]; } }

print "\nStarting Attack\t".(scalar localtime)."\n\n";

foreach (@TARGET) {
scan($_);
}

sub scan {
my ($ip)=@_;
for (my $i = $1; $i <=$#PORTS; $i++) {
check_port($ip, $PORTS[$i]);
next;
}
}

sub check_port {
my ($iaddr, $port) = @_;
printf "+%s: Scan For %s\n", $iaddr, $port;
my $sock = IO::Socket::INET->new(PeerAddr => $iaddr,
PeerPort => $port,
Timeout => 0.4) or print bleh;
if ($sock) { my $grab = grab($sock); printf "+%s: ==> %s Active : %s\n", $iaddr, $port, $grab; }
close $sock;
}

sub check_port2 {
my ($iaddr, $port) = @_;
printf "+%s: Scan For %s\n", $iaddr, $port;
my $proto = getprotobyname('tcp');
my $paddr = sockaddr_in($port, inet_aton($iaddr));
socket(SOCKET, PF_INET, SOCK_STREAM, $proto);
connect(SOCKET, $paddr);
if (<SOCKET>) { my $grab = grab(SOCKET); printf " ==> %s Active : %s\n", $iaddr, $port, $grab; }
}


sub grab { return <$_>; }

sub ping {
my ($ip) = @_;
my $p = Net::Ping->new("icmp");
print "Ping $host";
print "NOT " unless $p->ping($host, 2);
print "alive.\n";
$p->close(); }

sub make_ports {
my @port_strings = split(/,/, shift);
my @ports;
foreach (@port_strings) {
if (/(\d+)-(\d+)/) {
for (my $i = $1; $i <= $2; $i++) { push(@ports, $i); }
} else { push(@ports, $_); }
}
return @ports; }

sub make_ip {
my $ip = shift;
my $fonc = shift;
if (defined $fonc) {
open(IPLIST, $ip) or die "Unable to open iplist: $!";
@IP = <IPLIST>;
close(IPLIST);
chomp(@IP);
} else {
if ($ip=~/\-/) { ($IP1,$IP2)=split(/\-/,$ip); ($IP11,$IP12,$IP13,$IP14)=split(/\./,$IP1); ($IP21,$IP22,$IP23,$IP24)=split(/\./,$IP2);
$i = $IP14;
LOOP:
while($i<=$IP24) {
$i++;
my $ipaddr="$IP11.$IP12.$IP13.$i";
push(@IP, $ipaddr);
}
if ($IP13<$IP23) { $IP13++; $i = 1; goto LOOP }
} else { push(@IP, $ip); }
}
return @IP; }




je voudrait pouvoir créer plusieur socket, j ai essailler en assignant chaque socket dans un scalar mais sans resultat, j ai essailler avec la lib Thread mais elle bouffe le cpu, si kelkun pourrait m aider sa srait vraiment cool
A voir également:

1 réponse

bonjour, est ce un scanner de port ce que tu as programmé, si c'est le cas il ne marche pas sur mon ordinateur, je ne sais pas pourquoi il n'écrit que les premières lignes et il s'arrête , donc si tu peux m'aider je te serai tés reconnaissant car j'en ai vraiment besoin. merci.
0