Interne IP auslesen in C



  • Hi,
    für ein Uni-Projekt habe ich u.a. vor die interne IP (die der Router zugewiesen hat) auszugeben. Die Möglichkeit dazu scheint aber nur in C# zu geben, wobei ich an C99 & Windows-Bibliotheken gebunden bin. Ich konnte zumindest ausschließlich Lösungen mittels C# finden. ( GetIpAddrTable() )

    Gibt es eine Methode, wie ich das ganze auch in C realisieren kann? Ich verwende DevCpp als Umgebung, die den gcc Compiler nutzt (alles unter Windows).

    Bisher ist sehe ich als einzige Möglichkeit _popen() und ipconfig, woraus ich dann die IP heraussuche. Was aber kaum vernünftig funktioniert, da jeder PC andere Adapterbezeichungen und Reihenfolgen hat 😕

    Danke schonmal für die Hilfe 🙂





  • Danke für die schnelle Rückmeldung!

    Habe es gerade mit GetAdaptersInfo versucht, allerdings erhalte ich einen Linker error.

    [Linker error] undefined reference to `GetAdaptersInfo@8'
    

    Header habe ich aus dem Beispiel bei MSDN übernommen:

    #include <winsock2.h>
    #include <iphlpapi.h>
    #include <stdio.h>
    #include <stdlib.h>
    

    Muss ich noch bestimmte Parameter beim Kompilieren angeben?



  • die "Iphlpapi.lib" verlinken



  • Jap, jetzt funktioniert es!

    Dankeschön 🙂



  • Ich habe doch noch eine Frage zum verlinken. Das mit der iphlpapi hat gut funktioniert, allerdings brauche ich jetzt auch die icmpapi.

    Diese kannte DevCpp nicht mal, daher habe ich mir die header-Datei erstmal heruntergeladen. Allerdings weiß ich jetzt nicht, wie ich die verlinken soll. Ich habe öfters den Hinweis gesehen, den Parameter "-licmp" zu verwenden, allerdings scheint DevCpp den nicht zu kennen. (icmp.dll ist wirklich in System32 vorhanden).

    Hier die Verlinkung im Makefile:

    LIBS =  -L"H:/Dev-Cpp/lib"  -I "C:/Windows/System32" -lwsock32 -liphlpapi -licmp
    

    Ich erhalte einen Builderror:

    cannot find -licmp
    

    Da DevCpp nichtmal den header kannte, kennt es wahrscheinlich auch nicht diesen Parameter, oder? Hab ich noch ne andere Möglichkeit zu verlinken?



  • Gibt es für den mingw ein IcmpAPI.h?
    Bei meiner Dev-Cpp-Installation ist nur die iphlpapi.h dabei.
    Wenn nicht, nimmt VS2010 Express.



  • Nein, die war bei mir auch nicht dabei. Daher hab ich einfach versucht die einzufügen, allerdings weiß ich jetzt nicht, wie ich sie verlinken soll.

    Bin ich jetzt gezwugen zu visual studio zu wechseln? Das wäre äußerst ungünstig, da ich fast fertig bin mit dem Projekt und ein Umgebungswechsel wahrscheinlich ziemlich viele Probleme mit sich bringt...

    Damit angefangen, dass ich bei VS kein Projekt erstellen kann (Registrierungszugriff ungültig...). Bisherige Lösungsvorschläge haben nicht funktioniert.

    Gibt es keine Möglichkeit die Bibliothek unter DevCpp zum laufen zu bringen?



  • Natürlich kann man die DLL auch mit LoadLibrary() laden und die
    Einsprungstelle mit GetProcAdress() selbst auflösen.

    In der DLL unter XP finden sich diese Einsprungstellen:

    Dump of file icmp.dll
    
    ordinal name
    
        1   IcmpCloseHandle (forwarded to iphlpapi.IcmpCloseHandle)
        2   IcmpCreateFile (forwarded to iphlpapi.IcmpCreateFile)
        3   IcmpParseReplies (forwarded to iphlpapi.IcmpParseReplies)
        5   IcmpSendEcho (forwarded to iphlpapi.IcmpSendEcho)
        4   IcmpSendEcho2 (forwarded to iphlpapi.IcmpSendEcho2)
        6   do_echo_rep (forwarded to iphlpapi.do_echo_rep)
        7   do_echo_req (forwarded to iphlpapi.do_echo_req)
        8   register_icmp (forwarded to iphlpapi.register_icmp)
    

Anmelden zum Antworten