Ergebnis 1 bis 7 von 7

Thema: Ping mit popen() und fgets()

  1. #1
    Registered User
    Registriert seit
    Nov 2003
    Beiträge
    21
    Renommee
    15

    Question Ping mit popen() und fgets()

    Hallo Zusammen,

    ich möchte einen Ping an einen Host/IP Adresse schicken.Wichter als zu wissen, wie lange eine RTT braucht, ist zu wissen ob überhaupt eine Antwort zurück kommt. Dies soll als indiz dazu dienen, ob der Host überhaupt erreichbar ist. (Da es eigene Server sein werden ist auch sicher gestellt, dass diese auf Ping Anfragen antworten).

    Weil das ganze auf Linux laufen muss und mögilchst einfach gehalten sein soll, habe ich das mal wie folgt mit popen() und fgets() probiert.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX 2048
    
    int main()
    {
        printf("Hellol world!\n");
    
        FILE *fp;
        int status;
        char output[MAX];
        char str[MAX];
    
        int i = 0;
    
    
        fp = popen("ping -c 5 www.google.com", "r");
        if(fp == NULL)
        {
    
            printf("FP IS NULL");
        }
    
        while(fgets(output, MAX, fp) != NULL)
        {
            strcat(str, output);
        }
    
        printf("TEST: %s", str);
    
        status = pclose(fp);
        printf("status is %d\n", status);
    
        int x = 0;
        x = getchar();
        return 0;
    }
    Ich habe mir nun gedacht, ich parse dann den string str um das Ergebnis zu bekommen.
    Meine Fragen sind nun folgende:

    • ist dies ein guter Lösungsansatz?
    • Kann ich davon ausgehen, dass wenn status = 0 ist, eine Antwort zurück gekommen ist?


    Danke schonmal im Vorraus.

  2. #2
    Registered User
    Registriert seit
    Aug 2002
    Beiträge
    2.212
    Renommee
    622

    AW: Ping mit popen() und fgets()

    Hmm, ich wieder...
    Ich hab in meiner Abschlussarbeit, etwas ähnliches aber ein komplexeres "Script" geschrieben.
    Jenes sollte dann den Traffic messen, der über die Leitung geht. Ich hab dafür Programm-Outputs geparst...
    Ich hab zurecht nur ne drei bekommen. Es ist natürlich nicht der richtige Ansatz ein Programm aufzurufen und den Output zu parsen...
    Also wenn´s ein Programm werden soll, solltest du die Netzwerkverbindung selber aufbauen!

    Nur dann, kannst du dich auch auf Nullen und Einsen verlassen.

  3. #3
    Registered User
    Registriert seit
    Nov 2003
    Beiträge
    21
    Renommee
    15

    AW: Ping mit popen() und fgets()

    Hey,

    also eine Verbindung aufbauen, das folgt evtl. in einem späteren Schritt. Für den Moment reicht erst mal eine Ping Abfrage.
    Wenn man man ping in der Konsole eingibt kommt irgendwo folgender Text:
    ...If ping does not receive any reply packets at all it will exit with code 1. If a packet count and deadline are both specified, and fewer than count packets are received by the time the deadline has arrived, it will also exit with code 1. On other error it exits with code 2. Otherwise it exits with code 0. This makes it possible to use the exit code to see if a host is alive or not....
    Deswegen gehe ich mal davon aus das ich mich für den Moment auf den Wert verlassen kann. In Zukunft ist geplant mit einer Datenbank zu verbinden und Einträge zu schreiben. Für den Moment muss es aber ein Ping tun.

  4. #4
    Registered User
    Registriert seit
    Aug 2002
    Beiträge
    2.212
    Renommee
    622

    AW: Ping mit popen() und fgets()

    Ich schätze mal, dir ist klar was ein "Ping" ist und ob das senden und empfangen von icmp Signalen eine Netzwerk-Verbindung ist, lass ich mal im Raum stehen.

    Alles Gute

  5. #5
    Registered User
    Registriert seit
    Nov 2003
    Beiträge
    21
    Renommee
    15

    AW: Ping mit popen() und fgets()

    Habe mich vielleicht ein bisschen blöd ausgedrückt. Ich meinte damit, ich kann mich darauf verlassen, dass der Wert, den pclose() liefert, etwas darüber Aussagt ob eine Antwort zurück gekommen ist oder nicht. Von Verbindung kann natürlich erst mal keine Rede sein.
    also eine Verbindung aufbauen, das folgt evtl. in einem späteren Schritt.

  6. #6
    Registered User
    Registriert seit
    Aug 2002
    Beiträge
    2.212
    Renommee
    622

    AW: Ping mit popen() und fgets()

    Try and...

    popen is used to read and write to a unix pipe.

    This Funktion is NOT included in 'C Programming Language' (ANSI) but can be found in 'The Standard C Library' book.

    popen will always execute the command from within the Bourne shell.
    popen feeds the STDOUT back to your program.
    Link: Return values popen/pclose

    pclose is used to close a pipe created with popen.
    Dein Programm liest die Ausgabe auf std:out von dem im System Path zu findenden Programm/Executable ping!
    Ich bin mir eigentlich sicher, das ping bei 2 von -c 5 gefloppten Signalen, nicht errno setzt und so einen Systemfehler beim lesen der Pipe auslöst.

    (Da es eigene Server sein werden ist auch sicher gestellt, dass diese auf Ping Anfragen antworten).
    Zitat Zitat von alterUnbekannter
    Packet kommt nicht an -> das kann im Internet mal passieren... bezog sich zwar auf udp, sagt aber vieleicht das richtige aus!
    Einen Sockel zu öffnen, ist nicht komplizierter als ein Filehandel und so kann ich hier nur vom Ansatz an spekulieren!

    Try and...

    Beste Grüße
    Geändert von Enchanter (30.10.2013 um 09:58 Uhr) Grund: korrekturen ;-)

  7. #7
    Registered User
    Registriert seit
    Aug 2002
    Beiträge
    2.212
    Renommee
    622

    AW: Ping mit popen() und fgets()

    Setz wenigstens -m dann gilt dein Satz wie oben, habs gerade mal ausprobiert...
    Geändert von Enchanter (30.10.2013 um 13:55 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. probleme mit fgets
    Von orange bud im Forum C / C++
    Antworten: 8
    Letzter Beitrag: 11.11.2005, 12:51
  2. Blockieren von fgets verhindern!
    Von odyzeus im Forum C / C++
    Antworten: 8
    Letzter Beitrag: 24.06.2002, 00:01
  3. fgets (HTTP)
    Von root im Forum PHP, Perl und ASP
    Antworten: 0
    Letzter Beitrag: 27.02.2001, 22:21
  4. Ping
    Von stoker im Forum (In)Security allgemein
    Antworten: 10
    Letzter Beitrag: 24.01.2001, 15:07
  5. ping!!!
    Von Gridlock im Forum Netzwerktopologie & Technik
    Antworten: 9
    Letzter Beitrag: 05.11.2000, 14:09

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •