IPAdresse auslesen



  • Hallo,
    Ich entwickle mit C# für ein PDA-Projekt.
    Meine Application baut nach dem Start eine GPRS Verbindung zu einer Zentrale auf.
    Nun soll ich die im Internet gültige IPAdresse meines Gerätes speichern.
    Leider haben alle bisherigen Tipps aus dem C# oder PDA Forum nicht zum gewünschten Ergebnis geführt.

    Da alle außer mir in der Firma mit C/C++ arbeiten wollte ich nun das Problem mit c/c++ lösen.
    Ich habe versucht über die Funktionen
    "RasGetEntryProperties" und "RasGetProjectionInfo" mir die IPAdresse ausgeben zu lassen.
    Vom Code her soll alles in Ordnung seien(laut meiner Kollegen).
    Leider bekomme ich eine andere IPAdresse als erhofft ausgeben.

    Die IP lautet 10.226.... sollte aber eigentlich 80.225... sein.
    Meine Kollegen haben erstmal keine Erklärung,da Sie schon über Jahre so die IPAdresse abfragen.Allerdings arbeiten sie auch nicht mit einem PDA!

    Wie ist nun die "falsche IP" zu erklären und wie komme ich an die "richtige"?

    Gruß ppsJoerg



  • hi,

    ich habe mal ein programm geschrieben das sowas macht. hier der quelltext:

    // ip.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <windows.h>
    #include <stdio.h>
    #include <shellapi.h>
    #include <winsock2.h>
    #include <conio.h>
    
    #define NUM_ELEMENTS(x)  (sizeof((x)) / sizeof((x)[0])) // Für IP auslesen 
    char* IP_auslesen() 
    { 
      struct    hostent* h; 
      WSADATA   wsaData; 
      UCHAR     ucAddress[4]; 
      CHAR      szHostName[MAX_PATH]; 
      int       x;   
    	char IP_ADDRESSE[100];
        WSAStartup(MAKEWORD(1, 1), &wsaData); 
        if(SOCKET_ERROR != gethostname(szHostName, NUM_ELEMENTS(szHostName))) 
        { 
            if(NULL != (h = gethostbyname(szHostName))) 
            { 
                for(x = 0; (h->h_addr_list[x]); x++) 
                { 
    
                    ucAddress[0] = h->h_addr_list[x][0]; 
                    ucAddress[1] = h->h_addr_list[x][1]; 
                    ucAddress[2] = h->h_addr_list[x][2]; 
                    ucAddress[3] = h->h_addr_list[x][3]; 
    
                    wsprintf(IP_ADDRESSE, "%d.%d.%d.%d", ucAddress[0], ucAddress[1], ucAddress[2], ucAddress[3]);
    
                } 
            } 
        } 
        WSACleanup(); 
    
      return IP_ADDRESSE; 
    }
    
    int main(int argc, char* argv[])
    {
    	char help[100];
    	strcpy(help,IP_auslesen());
    	printf("IP:%s",help);
    	getch();
    	return 0;
    }
    

    gruss
    msp



  • Vielleicht kann dir das hier aus den FAQ weiter helfen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39386.html

    Zerebus



  • Hallo,
    danke für die Tipps.

    Die C-Funktionen die ich habe und noch schreibe packte ich alle in eine DLL,
    um dann im C# Projekt mittels DllImport auf sie zugreifen zu können.
    Habe daher den Code von "msp" in die DLL gepackt,einige Anpassungen vorgenommen und die fehlenden Includes eingebunden.
    Leider bekomme ich beim compilieren einige Fehler angezeigt mit denen ich nix anfangen kann!

    Gruß ppsJoerg

    Error 2 error LNK2019: unresolved external symbol WSACleanup referenced in function "char * __cdecl IP_auslesen(void)" (?IP_auslesen@@YAPADXZ) Pocket_DLL.obj
    Error 3 error LNK2019: unresolved external symbol gethostbyname referenced in function "char * __cdecl IP_auslesen(void)" (?IP_auslesen@@YAPADXZ) Pocket_DLL.obj
    Error 4 error LNK2019: unresolved external symbol gethostname referenced in function "char * __cdecl IP_auslesen(void)" (?IP_auslesen@@YAPADXZ) Pocket_DLL.obj
    Error 5 error LNK2019: unresolved external symbol WSAStartup referenced in function "char * __cdecl IP_auslesen(void)" (?IP_auslesen@@YAPADXZ) Pocket_DLL.obj
    Error 6 fatal error LNK1120: 4 unresolved externals Pocket PC 2003



  • Ws2.lib !?



  • Hallo,

    was soll mit Ws2.lib sein?
    muss ich die einbinden?
    Wenn ja woher bekomm ich die?

    Gruß ppsJoerg



  • ws2_32.lib



  • Wir reden hier von CE, somit ws2.lib... und wer für CE entwicklet hat auch das VC.CE (oder VC2005) und somit stellt sich die Frage nicht, woher man die ws2.lib bekommt.



  • Ok,
    die Ws2.lib ist da.
    Und nun?

    Gruß ppsJoerg



  • #pragma comment(lib, "ws2.lib")
    


  • Hallo,
    es funktioniert!
    Nur bekomme ich auch mit dieser Variante die falsche IP!
    Wieder ist die IP 10.225....!

    Gruß ppsJoerg



  • gehst du über einen router ins internet?



  • Hallo,
    wie anfangs erwähnt läuft das Programm auf einem PDA
    und es wird ein GPRS Verbindung mittels
    RasDial-Funktion hergestellt.

    Gruß ppsJoerg


Anmelden zum Antworten