ICMP Ping Empfangen und auswerten



  • Hallo,

    ich möchte ein kleinen Konsolentuul schreiben bei dem ich mitbekommen wenn mein Rechner angepingt wird. Letztentlich möchte ist dieses nutzen zur Überwachung ob eine gegenstelle die ein dauerping macht über WLan angebunden ist.
    Im ersten schritt wollte ich nur einmal UDP PAckete empfangen und ausgeben.

    Ich nutze als Kompiler den MinGW Studio unter Windows XP Profesional und ich habe folgendes Probiert:

    [code]
    #include <stdio.H>
    #include <iostream>
    #include <winsock.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <unistd.h>

    // libwsock32.a ist über den linker eingebunden

    int main(void) {
    WSADATA WSA;
    if (WSAStartup(MAKEWORD(1, 1), &WSA))
    {
    perror("WSAStartup() faild");
    return 1;
    }

    struct sockaddr_in sadr;
    int s;

    s = sock(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s==-1)
    {
    perror("socket() faild");
    return 1;
    }

    sadr.sin_addr.s_addr = htonl(INADDR_ANY);
    sadr.sin_port = htons(9033);
    sadr.sin_family = AF_INET;

    if (bind(s, &sadr, sizeof(sadr)) == -1)
    {
    perror("bind() faild");
    return 1;
    }
    }
    [code ende]

    Es wird alles wandfrei kompeliert aber wenn man es soweit ausführt kommt immer schon ein bind faild und befor ich dieses Problem nicht gelöst habe brauch ich auch nicht weitermachen oder mit ICMP anfangen.

    Kann mir jemand helfen ?

    Gruß
    Ralf



  • Dieser Thread wurde von Moderator/in Marc++us aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • bind Function bei MSDN, inklusive Erklärung aller return values.



  • Hi

    Du brauchst Admin-rechte. !
    Und mal schauen das du die return code,s richtig behandelst.

    Lowbyte



  • Ab Win2k gibts ne eigene API für ICMP-Echo ("ping"):
    http://msdn.microsoft.com/en-us/library/aa366050(VS.85).aspx (mit Beispielcode)

    mit Winsock kommt man da nicht um RAW-Sockets herum, welche allerdings Admin-Rechte benötigen.



  • Hallo,

    und schon enmal vielen dank für die Unterstützung. Ich bin schon ein bischen weiter gekommen und merke das das ganze nicht ganz so einfach ist.

    Einen großen schritt hat mich folgendes Weitergebracht:

    if (bind(s, (struct sockaddr *) &sadr, sizeof(sadr)) == -1)
    

    dann funktioniert es auch mit dem bind.

    Das ich RAW Sockets benötige war mir schon klar. Reicht es denn aus das der angemeldete Windows Benutzer locale Admin rechts hat oder muß sich zwingend der Administrator angemeldet haben ?

    Gruß
    Ralf


Anmelden zum Antworten