Oliver Lehmann: Systemkommando wird nicht ausgefuehrt ?!

Hi,

ich habe mir folgendes kleines Script geschrieben. Bis auf den Portscan funzt auch alles. Beim ausfuehren vom Portscan, erscheint das das document keinen Inhalt hat. ich habe mir auch schon den Befehl  ausdrucken lassen.

Wenn ich das Script auf der Kommandozeile ausfuehre, erscheint das was erscheinen soll ;-)

$ ./traceroute.pl
Content-type:text/plain

Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ )
Interesting ports on router.home1.de (192.168.168.1):
(The 1 port scanned but not shown below is in state: closed)
Port       State       Service
21/tcp     open        ftp
22/tcp     open        ssh
23/tcp     open        telnet

Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds
$

nur komischerweise im browser nix. hier mal das script:

#!/usr/bin/perl
@querys = split(/&/, $ENV{'QUERY_STRING'});
foreach $query (@querys) {
   ($name, $value) = split(/=/, $query);
   $FORM{$name} = $value;
}
$IP="$FORM{'URL'}";
$start="$FORM{'start'}";
$ende="$FORM{'ende'}";
print "Content-type:text/plain\n\n";
if($IP =~ /((1[0-9][0-9])(22[0-3])(2[0-1][0-9])([0-9][0-9]?)).(((1[0-9][0-9])(25[0-5])(2[0-4][0-9])(1[0-9]{0-1})([0-9][0-9]{0,1})).){2}((1[0-9][0-9])(25[0-4])(2[0-4][0-9])([0-9][0-9]{0,1}))$/) {
  $trace = "$FORM{'trace'}";
  if    ($trace eq "Traceroute") {print traceroute $IP}
  elsif ($trace eq "Ping")       {print ping -c 4 $IP}
  elsif ($trace eq "portscan")   {print nmap -p$start-$ende $IP\n}
  elsif ($trace eq "finger")     {print finger \@IP}
} else {
  print "Invalid IP adress ;-)))"
}

in der apache_error_log steht auch nix diesbezuegliche drinn. Einer ne Idee? *g*

MfG Olli

  1. Hallo Olli!

    Der Browser hat schon recht, es kommt wirklich kein Inhalt.

    »»   elsif ($trace eq "portscan")   {print nmap -p$start-$ende $IP\n}
    »»   elsif ($trace eq "finger")     {print finger \@IP}

    } else {

    »»   print "Invalid IP adress ;-)))"

    }

    Das letzte "else" bezieht sich auf das vorige elsif und nicht auf das oberste "if". Daher bekommt er bei einer von ihm als falschen IP-Adresse erkannten Ausdruck, keine Ausgabe.
    Für's debuggen kannste ja mal ganz unten noch print "debug"; hinzufügen, dann sollte auch der Browser was ausgeben.

    Bis denne,
    Dennis

    1. Hi Dennis,

      das versteh ich jetzt nicht ?!? egal was ich waehle, ping rtracerouter ... es kommt bei ner falschen ip immer die untere meldung. und wiso sollte der brower das nicht ausdrucken? versteh ich nicht, wenn ich die `` durch "" ersetze, kommt ja der befehl. der auch richtig ist.

      MfG Olli

      1. Hallo Olli

        Uups.. habe gerade gesehen, daß ich was überlesen hatte. Hmm.. soweit sieht das Script also ganz in Ordnung aus.
        Also nochmal Fehlerbehandlung: Wie rufst Du das Script im Browser auf? Was kommt 'raus?

        sorry*

        Bis denne,
        Dennis

        1. Hi Dennis,

          also aufruf ueber:

          http://webserv/cgi-bin/traceroute.pl?URL=192.168.168.1&trace=portscan&start=20&ende=23

          das ganze wird auch korrekt umgewandelt (print " " ausdruck ergibt --> nmap -p20-23 192.168.168.1)

          wenn ich die einzelnen variablen im perl script fest definiere, also ohne query string (

          $IP="192.168.168.1";
          if($IP =~ /((1[0-9][0-9])(22[0-3])(2[0-1][0-9])([0-9][0-9]?)).(((1[0-9][0-9])(25[0-5])(2[0-4][0-9])(1[0-9]{0-1})([0-9][0-9]{0,1})).){2}((1[0-9][0-9])(25[0-4])(2[0-4][0-9])([0-9][0-9]{0,1}))$/) {
            $trace = "$FORM{'trace'}";
          $trace="portscan";
          $start="20";
          $ende="23";

          ) erscheint in der konsole das was erscheinen soll (sie 1. pposting) aber der browser meint immer noch:

          <img src="http://www.pofo.de/1.jpg" alt="">

          wie gesagt, error log ist leer ;-) selbst wenn user nobody nmap nicht ausfuehren duerft, muesste ne meldung kommen, oder?

          MfG Olli

          1. Hi Olli!

            Mir ist gerade aufgefallen, dass Du

            print "content-type:text/plain\n\n" genommen hast, versuche doch mal das in das "Normale" umzuwandeln:

            print "Content-type: text/html\n\n";

            Vielleicht gibt zumindestens der Browser dann was aus und es hilft Dir weiter.

            Bis denne,
            Dennis

            1. Hi Dennis,

              das aht doch nix mit dem content type zu tun das schlimste was passieren kann ist das der browser es zum donwload anbietet ;-) (was er bei plain/text natuerlich nicht macht)

              [{text/html hart wie erwartet auch nix veraedert]

              MfG Olli

              1. Hi Dennis,

                xwolf hat mich gerade im chat drauf gemacht, nen path vor nmap udn das ganze funzt ;-) und...$start und $ende sind nicht geparst (security);-)

                MfG Olli