#!/usr/bin/perl use strict; use IO::Socket; $|=1; # Init Variables my $hostname = ''; my $targethost = 'localhost'; my $lowport = 1; my $highport = 1024; my $name = ''; my $aliases = ''; my $type = ''; my $len = ''; my $proto = ''; my $port = ''; my $srv_name = ''; my $srv_aliases = ''; my $srv_proto = ''; my $srv_port = ''; my $localaddr = 0; my $targetaddr = 0; my $local = 0; my $target = 0; my $AF_INET = 2; my $SOCK_STREAM = 1; my $sockaddr = 'S n a4 x8'; my %ein = (); # fuer Formulareingaben my $input = ''; my $pname = ''; my $value = ''; # Netzmafia selbst einrichten chop ($hostname = `hostname`); # Remote-Host my $raddr = $ENV{REMOTE_ADDR}; my $rhost = &get_host($raddr); # Get the input read(STDIN,$input,$ENV{CONTENT_LENGTH}); # Split the name-value pairs foreach (split("&",$input)) { /(.*)=(.*)/; $pname = $1; $value = $2; $value =~ s/\+/ /g; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $ein{$pname} = $value; } # Print HTML-Header print "Content-type: text/html", "\r\n\r\n"; print "", "\n"; print "Portscanner", "\n"; print "", "\n"; print "

TCP-Portscanner

", "\n"; # Eingaben uebernehmen, $targethost = $ein{'targethost'}; $lowport = $ein{'lowport'}; $highport = $ein{'highport'}; if (! defined($targethost)) { &formular; } elsif (defined($lowport) && defined($highport)) { if ($lowport=~ m/[a-z]/g) { &error("Falscher Anfangsport!"); } if ($highport=~ m/[a-z]/g) { &error("Falscher Endeport!"); } &portscan; } else { &error("Bitte alle Felder ausfüllen!"); } print "", "\n"; exit(0); # Portscanner sub portscan { print "Scanning $targethost, Ports: $lowport bis $highport.
\n"; print "(Scanning from $hostname)
\n"; $port = $lowport; while ($port <= $highport ) { ($name,$aliases,$proto) = getprotobyname('tcp'); ($name,$aliases,$port) = getservbyname($port,'tcp') unless $port=~ /^\d+$/; ($name,$aliases,$type,$len,$localaddr) = gethostbyname($hostname); $local = pack($sockaddr,$AF_INET,0,$localaddr); ($name,$aliases,$type,$len,$targetaddr) = gethostbyname($targethost); $target = pack($sockaddr,$AF_INET,$port,$targetaddr); socket(S,$AF_INET,$SOCK_STREAM,$proto); bind(S,$local); if (connect(S,$target)) { # Verbindung vorhanden ($srv_name,$srv_aliases,$srv_port,$srv_proto) = getservbyport($port,'tcp'); print "$port ($srv_name) O. K.
\n"; } close(S); $port++; } } sub error { my $errors = $_[0]; print "

Fehler aufgetreten:

\n"; print "$errors
$!

\n"; print "\n"; exit; } sub formular { print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
Hostname:
Anfangsport:
Endeport:
 "; print "\n"; print "
\n"; print "

Ich versichere, daß der oben unter \"Hostname\" eingetragene Rechner\n"; print "mein eigener Rechner ist und ich den Portscan nur zum Zweck der\n"; print "Sicherheitsüberprüfung starte.

\n"; } sub get_host { # Arg 1: IP-Adresse als String # Return: Host-Name als String my ($i_addr, $i_host); # String in numerisches Formmat wandeln $i_addr = inet_aton($_[0]); $i_host = gethostbyaddr ( $i_addr , 2 ) or return ""; return $i_host; }