Ping programm

Tutorials.at
Verfügbare Informationen zu "Ping programm"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Elch - Dubbel - DrPhil_Guth - exbs - geek.90
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 20
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Ping programm
  • Letzte Antwort: vor 16 Jahren, 8 Monaten, 1 Tag, 23 Stunden, 18 Minuten
  • Alle Beiträge und Antworten zu "Ping programm"

    Re: Ping programm

    Elch - 26.07.2007, 16:49

    Ping programm
    Hi,
    Ich wollte ein Programm schreiben in das ich eine oder mehrere IP's eingeben kann und diese werden dann ununterbrochen gepingt.
    Leider bin ich gleich am anfang auf ein Problem gestossen:
    Der Befehl system("ping...") nimmt keine Variablen an (system("ping%d",&ip); funktioniert nicht :( )

    hat jemand eine Idee wie man das machen koennte?

    mfg Elch



    Re: Ping programm

    Dubbel - 26.07.2007, 17:23


    Muss da nicht das & weg?
    Code:
    system("ping%d",ip);

    Vielleicht klappts ja dann, ich kann mir das aber irgendwie nicht wirklich vorstellen ^^



    Re: Ping programm

    Elch - 26.07.2007, 17:51


    klappt auch nicht, da steht dann immer "der host %d konnte nicht gefunden werden"



    Re: Ping programm

    DrPhil_Guth - 26.07.2007, 18:05


    Also erstens ist das keine Aufgabe für ein C- Programm sondern für ein Batch- Script:

    Code: rem sendet ununterbrochen Ping- abfragen

    rem das hier ist ein label
    anfang:

    rem das ist der befehl. %1 bedeutet das erste argument dass dem Programm übergeben wurde
    ping %1

    goto anfang

    Zweitens, das was du erreichen willst geht anders.
    Also das mit dem %d geht nur bei der printf familie!!! Für alle anderen funktionen sind %d nur zeichen.

    Das bedeutet du musst den string zuerst parsen. so:

    Code: /* speicher reservieren */
    char buffer[100];

    /* speicher mit nullen überschreiben*/
    memset (buffer, '\0', 100);

    /* String parsen */
    sprintf (buffer, "ping %s", argv[1]);

    /* Programm aufrufen */
    system(buffer);

    Und drittens: das ist echt ziemlich weit entfernt davon dein Programm zu sein. Das einzige was du tust ist ein anderes aufrufen, und das noch vollkommen unportabel. Sei froh, wenn auch nur irgendwas geht.

    Wenn du das ganze richtig mahcen willst, dann lern BSD- Sockets/Winsock programmierung. (Netzwerkprogrammierung)

    Und bitte:

    Mute dir nicht zuviel zu, aber denk nicht ganz so einfach!



    Re: Ping programm

    Elch - 26.07.2007, 18:17


    Danke...



    Re: Ping programm

    exbs - 26.07.2007, 21:49


    http://www.egocrew.de/taxonomy_menu/10/25/34 vlt hilft die das weiter.



    Re: Ping programm

    Elch - 08.08.2007, 15:20


    Zitat: Also erstens ist das keine Aufgabe für ein C- Programm sondern für ein Batch- Script:

    Code:
    rem sendet ununterbrochen Ping- abfragen

    rem das hier ist ein label
    anfang:

    rem das ist der befehl. %1 bedeutet das erste argument dass dem Programm übergeben wurde
    ping %1

    goto anfang


    Zweitens, das was du erreichen willst geht anders.
    Also das mit dem %d geht nur bei der printf familie!!! Für alle anderen funktionen sind %d nur zeichen.

    Das bedeutet du musst den string zuerst parsen. so:

    Code:
    /* speicher reservieren */
    char buffer[100];

    /* speicher mit nullen überschreiben*/
    memset (buffer, '\0', 100);

    /* String parsen */
    sprintf (buffer, "ping %s", argv[1]);

    /* Programm aufrufen */
    system(buffer);


    Und drittens: das ist echt ziemlich weit entfernt davon dein Programm zu sein. Das einzige was du tust ist ein anderes aufrufen, und das noch vollkommen unportabel. Sei froh, wenn auch nur irgendwas geht.

    Wenn du das ganze richtig mahcen willst, dann lern BSD- Sockets/Winsock programmierung. (Netzwerkprogrammierung)

    Und bitte:

    Mute dir nicht zuviel zu, aber denk nicht ganz so einfach!


    sorry das ich erst so spät wieder antworte... aber koenntest du (oder Irgendjemand) das mal anhand eines Beispiels erläutern?



    Re: Ping programm

    DrPhil_Guth - 08.08.2007, 16:48


    was willst du denn erläutert haben`?



    Re: Ping programm

    Elch - 09.08.2007, 14:34


    ich braeuchte einfach mal ein ganz kurzes Programm mit allem drum und dran in dem der buffer verwendet wird.
    mfg Elch



    Re: Ping programm

    DrPhil_Guth - 09.08.2007, 17:06


    Code: #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
       char yn;
       char buffer[128];
       char command[133];

       memset(buffer, '\0', 128);
       memset(command, '\0', 133);

       printf ("Ich erklaere mich hiermit bereit, "
          "alle Warnungen ueber den schlechten Programmierstil und"
          "nicht vorhandene Portabilitaet zu ignorieren.\n");

       printf("Wenn sie einverstanden sind bestaetigen sie mit y: ");

       yn = getchar();
       if (yn != 'y')
          return 0;

       printf ("\nBitte geben sie nun den Zielcomputer an: ");
       fgets(buffer, 127, stdin); /* [edit] hier war der fehler [/edit] */

       sprintf(command, "ping %s", buffer);

       system(command);
          

       return 0;
    }



    Re: Ping programm

    Elch - 09.08.2007, 17:57


    Danke :D :D :D



    Re: Ping programm

    DrPhil_Guth - 09.08.2007, 19:26


    ups kleiner fehler...

    fgets() hat als erster argument den zielstring und als letztes den fileptr.
    schon geändert.



    Re: Ping programm

    exbs - 09.08.2007, 22:04


    Zitat: Code:    memset(buffer, '\0', 128);
    memset(command, '\0', 133);
    gibt es einen speziellen grund, warum du das ganze array nullterminierst? immerhin is es ein string und der is am ende eh '\0' !



    Re: Ping programm

    DrPhil_Guth - 10.08.2007, 16:06


    hm..

    keine ahnung mach ich immer. Steht das irgendwo definiert dass strings mit 0 initialsiert werden?

    Für mich ist es nämlich nichts anderes als ein array mit reserviertem speicher. Und das ist nunmal beeim anfang des programms uninitialisiert. Keine ahnung obs stimmt, aber ich denke mal es schadet nicht.



    Re: Ping programm

    exbs - 11.08.2007, 01:34


    Nja natürlich schadet es nicht. Aber ein "String" - in C (ich weiß es ist keiner!), hab am Ende immer ein '\0', wenn du nun das ganze Array damit befüllst, dann ist das ja nicht besonders Sinnvoll, da zum ein "%s" nicht wüsste, wo Ende ist, oder sehe ich das falsch?



    Re: Ping programm

    DrPhil_Guth - 11.08.2007, 12:09


    %s weiß auch nicht wann ende ist!

    dsa ist das problem mit all den funktionen, die strings bearbeiten ohne eine anzahl anzugeben.

    In C++ hast du ein string objekt, du weißt wie lang das ist und wenn es nicht ausreicht wird einfach mehr speicher allokiert.

    Aber bei C ist das ganze schwieriger:

    Da kennst du nur die startadresse deines Strings! Wie viel speicher du reserviert hast musst du selber wissen.

    Und wenn dann eine Funktion mehr schreibt als du allokiert hast gibts einen Segfault. Genauso mit sprintf: wenn der string der geprintet werden soll zu lang ist, dann schreibst du über die arraygrenzen hinaus.
    Sprintf schaut nicht, ob da auch ja kein nullterminierungszeichen ist, genauso wie keine andere string- funktion.

    Nur die lesefunktionen beachten das nullterminierungszeichen, damit sie wissen wann der string aus ist. (wenn keins da ist? Dann hoffen das irgendwann, möglichst bald eines im speicher vorhanden ist)

    Du musst immer damit rechnen dass die eingabe länger ist.
    Übrigens, das ist die Sicherheitslücke nummer eins! Ein buffer overflow durch benutzereingabe öffnet Schadcode tür und tor.
    Code:
    char buf[11]; /* f10mb65v34v */
    memset (buf, '\0', 11); /* 00000000000 */

    /* nur 10, dann kannst du dir sicher sein, dass am ende ein '\0' steht */
    gets(buf, 10, stdin); /* test0000000*/

    char outbuf[15];
    memset (outbuf, '\0', 15);

    /* abc (+ leerzeichen) ist 4 chars lang. Da du weißt dass buf auch maximal 10 zeichen hat, kannst du nur so sicher sein dass kein buffer overflow vorliegt. */
    sprintf (buf, "abc %s", buf);

    Ist natürlich umständlich. Aber falls sich jemand mit Assembler Programmierung beschäftigt, oder einfach nur weiß wie so ein Funktionsaufruf von statten geht, der weiß wie man einen buffer overflow ausnutzen kann.



    Re: Ping programm

    exbs - 11.08.2007, 13:43


    Ich danke dir für diese Erklärung. Ich habe bis jetzt immer nur das Ende mit '\0' initialisiert.



    Re: Ping programm

    geek.90 - 22.08.2007, 11:17


    DrPhil_Guth hat folgendes geschrieben: Code:
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
       char yn;
       char buffer[128];
       char command[133];

       memset(buffer, '\0', 128);
       memset(command, '\0', 133);

       printf ("Ich erklaere mich hiermit bereit, "
          "alle Warnungen ueber den schlechten Programmierstil und"
          "nicht vorhandene Portabilitaet zu ignorieren.\n");

       printf("Wenn sie einverstanden sind bestaetigen sie mit y: ");

       yn = getchar();
    [color=cyan]        fflush(stdin);[/color]
       if (yn != 'y')
          return 0;

       printf ("\nBitte geben sie nun den Zielcomputer an: ");
       fgets(buffer, 127, stdin); /* [edit] hier war der fehler [/edit] */

       sprintf(command, "ping %s", buffer);

       system(command);
          

       return 0;
    }

    Hallo zusammen,
    Muss an diesem Code noch etwas anpassen, damit ein Ping ausgeführt wird, was muss man noch machen? Wie sehen die nächsten Schritte aus?

    Code:
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
       char yn;
       char buffer[128];
       char command[133];

       memset(buffer, '\0', 128);
       memset(command, '\0', 133);

       printf ("Ich erklaere mich hiermit bereit, "
          "alle Warnungen ueber den schlechten Programmierstil und"
          "nicht vorhandene Portabilitaet zu ignorieren.\n");

       printf("Wenn sie einverstanden sind bestaetigen sie mit y: ");

       yn = getchar();
            fflush (stdin);
       if (yn != 'y')
          return 0;

       printf ("\nBitte geben sie nun den Zielcomputer an: ");
       fgets(buffer, 127, stdin); /* [edit] hier war der fehler [/edit] */

       sprintf(command, "ping %s", buffer);

       system(command);
          

       return 0;
    }

    Das einzige, was ich gemacht habe, ist bei der If-Kontrollstruktur eine Änderung. Doch wie weiter...?
    yn = getchar();
    fflush (stdin);
    if (yn != 'y')
    return 0;

    Danke euch!

    Liebe Grüsse
    Geek



    Re: Ping programm

    exbs - 22.08.2007, 13:24


    Kein "fflush(stdin)"!!!! Das ist sehr schlechter Stil.

    Ich glaube in der FAQ steht auch etwas dazu!!



    Re: Ping programm

    DrPhil_Guth - 22.08.2007, 16:13


    *kopf->tisch*

    Also erstens, nein NICHT fflush(stdin), lies die FAQ, wie exbs richtig verlinkt hat.

    Zweitens sollte die abfrage überhaupt erst daran erinnern, dass du es dir zu einfach machst und sie war eher als scherz gemeint.

    Drittens:

    Das was du schreibst ist kein ping programm. Du schreibst ein Programm, das ein Ping Programm aufruft.

    Wenn du wirklich so ein Programm selber schreiben willst, dann such nach "BSD Sockets API" bzw "Winsock API".

    Dann such nach dem ICMP Protkoll, indem die Ping- Pakete definiert sind.

    Und dann such nach RAW Sockets um das ganze zu verbinden.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    @Walgo - gepostet von Xin am Samstag 21.07.2007
    Welche kostenlose Firewall ist die sicherste? - gepostet von Danny am Freitag 13.04.2007
    Befehl zum löschen einer Datei - gepostet von Bratwurst am Dienstag 14.08.2007
    brauche Hilfe für ein kleines Programm - gepostet von Boron am Samstag 24.06.2006
    Volumenrechner [Erledigt] - gepostet von AQE89 am Sonntag 28.05.2006
    FAQ - gepostet von Dragorad am Donnerstag 29.03.2007
    verzweifelte Fehlersuche (C) - gepostet von Hannibal93 am Sonntag 17.06.2007



    Ähnliche Beiträge wie "Ping programm"

    Wer kommt in Mohrenkönig! Neues Programm!! - dussi (Montag 16.04.2007)
    TV Programm - Mietzlinchen (Freitag 13.07.2007)
    Programm - ostaricia (Dienstag 18.09.2007)
    3D Ping Pong - Pato (Samstag 26.01.2008)
    neues oder altes Programm ??? - kiki010101 (Donnerstag 21.06.2007)
    Sechselberg Gemeinschaftsfreizeit Programm - Karolinchen (Dienstag 03.10.2006)
    Schleifen Programm - Kimi (Samstag 01.12.2007)
    Gericht verbietet "Cards"-Programm - 4dministr4t0r (Montag 25.12.2006)
    Ezan Programm! - eQua (Freitag 06.01.2006)
    Speak-Programm - Sir_Achim (Montag 15.01.2007)