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.1

    1. 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 ;).


Log in to reply