Archiv verlassen und diese Seite im Standarddesign anzeigen : while-Schleifen
iceman99
01.06.2006, 11:50
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
supersucker
01.06.2006, 12:31
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.
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?
while ($count < $ports) // $ports ist die länge des arrays
4. nur Konstanten sollte man groß schreiben.
iceman99
01.06.2006, 12:34
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?
supersucker
01.06.2006, 12:38
Zeig mal einen Auszug aus der Datei und beschreib was du machen willst.
Ohne das zu wissen ist es schwer zu helfen.
iceman99
01.06.2006, 13:19
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.
supersucker
01.06.2006, 13:39
ungetester Schnellschuß:
#!/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.
Powered by vBulletin® Version 4.2.0 Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.