while-Schleifen

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von iceman99, 01.06.2006.

  1. #1 iceman99, 01.06.2006
    iceman99

    iceman99 Jungspund

    Dabei seit:
    23.05.2006
    Beiträge:
    19
    Zustimmungen:
    0
    Hallo,
    ich versuche mich gerade in einer verschachtelten while-Schleife.

    Warum wird die erste Schleife nur einmal durchlaufen? Was kann ich ändern?

    #!/usr/bin/perl -w

    use strict;

    @PORTS=(21,22,25,53,66,80,81,110,118,119,150,156);
    $ZAEHLER=0;
    open(FILE,"hosts.list") || die "Fehler beim Öffnen der Datei: $!\n";
    while(defined(my $i = <FILE>)) {
    while ($ZAEHLER <= 11) {
    print "$i $PORTS[$ZAEHLER]";
    $ZAEHLER++;
    }
    }

    Bis dann
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 supersucker, 01.06.2006
    Zuletzt bearbeitet: 01.06.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Code:
    open(FILE,"hosts.list") || die "Fehler beim Öffnen der Datei: $!\n";
    while(defined(my $i = <FILE>)) {
    Natürlich wird sie nur einmal durchlaufen.

    Du öffnest schließlich ja auch nur ein file.

    Noch ein paar Anmerkungen zu deinem Code:

    1. Code tags benutzen
    2. Es ist immer eine schlechte Idee Variablen deutsch zu benennen.
    3.
    Code:
    while ($ZAEHLER <= 11) 
    Und wenn du einen Port hinzufügst im Array willst du ja wohl nicht in jeder Schleife die 11 auf 12 inkrementiern, oder?
    Code:
    while ($count < $ports) // $ports ist die länge des arrays 
    4. nur Konstanten sollte man groß schreiben.
     
  4. #3 iceman99, 01.06.2006
    iceman99

    iceman99 Jungspund

    Dabei seit:
    23.05.2006
    Beiträge:
    19
    Zustimmungen:
    0
    Klar, aber in dem File sind eine Menge Einträge. Die Schleifen funktionieren ohne die Verschachtelung ja auch.

    Wie kann ich das Problem lösen?
     
  5. #4 supersucker, 01.06.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Zeig mal einen Auszug aus der Datei und beschreib was du machen willst.

    Ohne das zu wissen ist es schwer zu helfen.
     
  6. #5 iceman99, 01.06.2006
    iceman99

    iceman99 Jungspund

    Dabei seit:
    23.05.2006
    Beiträge:
    19
    Zustimmungen:
    0
    Hi,
    hier ist ein Auszug aus der Dateiliste:

    checkit1.gambit.net
    cnt1-wsb.gambit.net
    cnt2-wsb.gambit.net
    contentdb.xon.gambit.net
    contentdb1-wsb.xon.gambit.net
    contentdb2-wsb.xon.gambit.net

    Diese möchte ich der Reihe nach mit den Ports aus @PORTS per telnet abfragen und die Antwort dann zur Auswertung in eine Datei schreiben.

    D.h.
    telnet checkit1.gambit.net 21
    telnet checkit1.gambit.net 22
    telnet checkit1.gambit.net 25
    ....
    telnet cnt1-wsb.gambit.net 21
    telnet cnt1-wsb.gambit.net 22
    telnet cnt1-wsb.gambit.net 25
    .....
    usw.

    Das soll dabei rauskommen.
     
  7. #6 supersucker, 01.06.2006
    Zuletzt bearbeitet: 01.06.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    ungetester Schnellschuß:

    Code:
    #!/usr/bin/perl
    
    use strict;
    use warning;
    
    my @ports=(21,22,25,53,66,80,81,110,118,119,150,156);
    my $host;
    my $line;
    my $scanStatus;
    my $telnetCommand;
    
    open(INFILE,"<hosts.list") || die "Could not open file: $!\n";
    open(OUTFILE, ">>scanresults") || die "Could not open file: $!\n";
    
    while($line = <INFILE>) {
       if($line=~ m/(^[a-z.-]+)(\s+$)/){
          $host = $1;
          foreach my $singlePort(@ports){
              $telnetCommand = "telnet " . $host . " " . $singlePort;
              $scanStatus = qx($telnetCommand);
              print OUTFILE $host . " " . $singlePort . "  scanresult: " . $scanStatus; 
          }
       }
    }
    close(INFILE)|| die "Could not close file: $!\n";
    close(OUTFILE)|| die "Could not close file: $!\n";
    
    
    
    EDIT:

    1. sollte klar sein das so eine telnet - Abfrage ewig dauern kann.
    2. kann man das script natürlich noch effizienter machen und sich einige Variablen sparen die ich dringelassen habe, damit du besser verstehst was da passiert.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

while-Schleifen