while-Schleifen

I

iceman99

Jungspund
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
 
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.
 
Zuletzt bearbeitet:
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?
 
Zeig mal einen Auszug aus der Datei und beschreib was du machen willst.

Ohne das zu wissen ist es schwer zu helfen.
 
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.
 
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.
 
Zuletzt bearbeitet:

Ähnliche Themen

ip6tables Problem

Server und Client für TCP und UDP

[Perl] Perl OO Methodenaufruf in anderem Objekt

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

perl script, das Dateien aus einer Liste löscht

Zurück
Oben