liste pingen
-
hi leute
hab da ein problem!ich brauche von ca. 20 pc die ip!
Nun die liste habe ich in einer txt-datei gespeichert. Diese Datei wird vom programm zeilenweise eingelsen(auf jeder zeile befindet sich ein eingtrag).
dieser eintrag ist der netbios-name. das problem ist nun folgendes die ersten 3einträge werden ohne anstand angepingt aber beim 4bricht er ab.
Und ich habe keine ahnung wieso!!!!
Hier die source:int main(void) { FILE* liste; FILE* ip; char buffer[20]; char ping[] = "ping -n 1 "; int i = 0; liste = fopen("liste.txt", "r"); if (!liste) { exit(1); } while (!feof(liste)) { fgets(buffer, 20, liste); cout<<buffer; strcat(ping,buffer); system(ping); } fclose(liste); return 0; }
-
Du bist dir aber schon im Klaren was strcat() genau macht, oder??
1. Du hängst immer wieder die IP-Adresse hinten dran, ohne die vorherige wieder wegzunehmen.
Beispiel:
ip1 = 127.0.0.1
ip2 = 192.0.0.11. Durchlauf
ping = "ping -n l 127.0.0.1"2. Durchlauf
ping = "ping -n l 127.0.0.1 192.0.0.1"usw.
2. Dein String ping hat maximal soviel Speicherplatz reserviert wie "ping -n l" braucht (also 10 Bytes). Das hat zur Folge, dass du einen Bufferoverflow verursachst, wenn du da einfach was hinten dranhängst, d. h. du schreibst deine IP-Adressen in nicht reservierten Speicher bzw. in den Speicher anderer Variablen oder sogar des Programmcodes. Dies führt dazu, dass sich dein Programm höchst wahrscheinlich sehr komisch verhält.
Lösung:
Mach dir einen dritten String (mit genügend reservierten Speicher!) und befühle diesen so (anstatt von strcat()):sprintf(befehl, "%s %s", ping, buffer);
Den Aufruf von system() musst du natürlich entsprechend anpassen ;).