#!/usr/bin/perl
#############################################################
#
# Asmo's Port Scanner
#
#############################################################

use Socket;

print "APS : Asmo's Port Scanner - $0\n\n";
print "Hote: ";
$remote=<STDIN>;
chop($remote) if $remote =~ /\n$/;

print "Port de depart [1]: ";
$start=<STDIN>;
chop($start) if $start =~ /\n$/;
if($start eq "")
{
$start=1;
}

print "Port de fin [65536]: ";
$stop=<STDIN>;
chop($stop) if $stop =~ /\n$/;
if($stop eq "")
{
$stop=65536;
}

print "Logger la session ? (o/n)";
$on=<STDIN>;

if($on =~ /o/i)
{ 
	$log = 1; 
	$logfile="$remote".".txt";

	print "Fichier log [$logfile]: ";
	$file=<STDIN>;
	chop($file) if $file =~ /\n$/;

	if($file ne "") 
	{
		$logfile=$file;
	}
	open(LOG,">>$logfile") || die("Impossible d'ecrire dans   $logfile!");
	print LOG "Scan de $remote sur le port $port\n\n";
}


$time = localtime(time);

print "\nScan des ports $start a $stop sur $remote -*- $time\n\n";
print LOG "\nScan des ports $start a $stop sur $remote -*- $time\n\n";
	$current=$start;
	while($current < $stop)
	{
		&scan_port($current);
		$current++;
	}

$time = localtime(time);
print "\nScan de $remote termine -*- $time\n";
print LOG "\nScan de $remote termine -*- $time\n";
close(LOG);

sub scan_port
{
$port = shift(@_);

	if ($port =~ /\D/) { $port = getservbyname($port, 'tcp'); }
	die("Pas de port specifie.") unless $port;
	$iaddr = inet_aton($remote) || die("Failed to find host: $remote");
	$paddr = sockaddr_in($port, $iaddr);
	$proto = getprotobyname('tcp');
	socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die("Failed to open socket: $!");
	if(connect(SOCK, $paddr))# || die("Imppossible se connecter : $!");
	{
		print "Port ouvert : $port\n";
		print LOG "Port ouvert : $port\n";
	}
	close(SOCK);
}


exit;
