Internet IP rausbekommen



  • Hallo,

    ich möchte gern ein Programm schreiben, welches mir meine Internet IP ausgibt.
    Ich besitze einen Router!

    Danke für eure Hilfe





  • und wie kann mann das auswerte mit c++?



  • Du machst ein connect() zu obiger url und gehst die Antwort ( Website ) durch bis Du die IP hast.

    Wie Webseiten geladen werden dürftest Du in der FAQ finden oder auf c-worker.ch

    Grüße
    RB



  • Vieleicht hilft Dir die Funktion "GetIpStatistics()".
    Schlage bitte in der MSDN-Library-Hilfe nach.



  • Hat keiner ein Beipiel?



  • Wenn Du ein Router hast, ist das leider nicht ganz einfach... wie "RED-BARON" gesagt hast, könntest Du irgendeinen Server anfragen, der Dir Deine IP-Adresse mitteilt... (z.B. via CInternetSession::OpenURL bzw. InternetOpenUrl)
    Wenn Dein Reouter UPnP unterstützt kannst Du den auch direkt fragen (kann Dir jetzt aber kein Beispiel zeigen 😞 )...



  • Es gibt hier irgendwo in der Forensuche ein Beispiel dazu.
    Dort wird von oben beschriebenem URL die IP ausgelesen.

    Und der Website ist es absolut wurst ob du einen Router
    dran hast... 🙄



  • Ist bestimmt verbesserungsfähig da ich c Anfänger bin, hatte allerdings vor einiger Zeit genau den selben Wunsch wie du.

    Hier ist mein Code ( funktioniert soweit )

    static void GetMyIP(){
    
        int sock;
        struct sockaddr_in host_addr;
        struct hostent *hostinfo;
        char *host;
        char command[1024];
        char buf[1024];
        int bytes_sent, bytes_recv;
    	FILE * T_Out;
    
    	// Socket initialisierung
        sock = socket (AF_INET, SOCK_STREAM, 0);
        if (sock == -1) {
    		sprintf(T_IPG, "socket()");
            return;
        }
    
       host = "63.209.100.216";  // www.whatismyip.com
    
        /* Adresse des Servers festlegen */
        memset( &host_addr, 0, sizeof (host_addr));
        host_addr.sin_family = AF_INET;
        host_addr.sin_port = htons (80);
    
        host_addr.sin_addr.s_addr = inet_addr ("63.209.100.216");
        if (host_addr.sin_addr.s_addr == INADDR_NONE) {
            // Server wurde nicht mit IP sondern mit dem Namen angegeben
            hostinfo = gethostbyname (host);
            if (hostinfo == NULL) {
    			sprintf(T_IPG, "gethostbyname ()");
                return;
            }
            memcpy((char*) &host_addr.sin_addr.s_addr, hostinfo->h_addr, hostinfo->h_length);
        }
    
        /* Verbindung aufbauen */
        if (connect(sock, (struct sockaddr *) &host_addr, sizeof(struct sockaddr)) == -1) {
    		sprintf(T_IPG, "connect()");
            return;
        }
    
        /* HTTP-GET-Befehl */
        sprintf (command, "GET / HTTP/1.0\nHost:www.whatismyip.com\n\n");
    
        /* Befehl senden */
        bytes_sent = send (sock, command, strlen (command), 0);
        if (bytes_sent == -1) {
    		sprintf(T_IPG, "send()");
            return;
        }
    
        /* Antwort des Servers empfangen und in Datei ausgeben */
        T_Out = fopen("OUT.TXT","w");
        while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) {
            fputs(buf, T_Out);
        }
        if (bytes_recv == -1) {
            fclose(T_Out);
            sprintf(T_IPG, "recv()");
            return;
        }
        fclose(T_Out);
    
    	// Datei wird nach Schluesselwort "IP Is" durchsucht
        T_Out = fopen("OUT.TXT","r");
        if(T_Out != NULL){
    		char T_search[100];
    		int T_zaehl=0;
    		int T_hit;
    		T_hit = 0;
        	while(!feof(T_Out)){
    			if( fgets(T_search, 100, T_Out) != 0){
    				for(T_zaehl=0; T_zaehl<strlen(T_search); T_zaehl++){
    					switch (T_search[T_zaehl]){
    						case 73:
    							if(T_hit == 0){
    								T_hit++;
    							}
    							if(T_hit == 3){
    								T_hit++;
    							}
    							break;
    						case 80:
    							if(T_hit == 1){
    								T_hit++;
    							}
    							break;
    						case 32:
    							if(T_hit == 2){
    								T_hit++;
    							}
    							break;
    						case 115:
    							if(T_hit == 4){
    								T_hit++;
    							}
    							break;
    						default:
    							if(T_hit != 5){
    								T_hit = 0;
    							}
    					}
    					if(T_hit == 5){
    						T_zaehl = T_zaehl+2;
    						break;
    					}
    				}
    			}
    			if(T_hit == 5){
    				break;
    			}
    		}
    		if(T_hit == 5){
    			int T_zaehlIP;
    			T_zaehlIP = 0;
    			while(T_search[T_zaehl] != 32){				// IP String wird geschrieben
    				T_IPG[T_zaehlIP] = T_search[T_zaehl];
    				T_zaehlIP++;
    				T_zaehl++;
    			}
    			while(T_zaehlIP<15){
    				T_IPG[T_zaehlIP]=32;
    				T_zaehlIP++;
    			}
    			fclose(T_Out);
    			remove("OUT.TXT");
    			return;
    		}
    		fclose(T_Out);
    		remove("OUT.TXT");
    		sprintf(T_IPG, "GETIP error");
    		return;
    	}
    }
    

    ich hoffe ich konnte dir helfen

    MFG c°h°



  • Lustiger Code.



  • IP heißt: "Internet Protocol"
    Internet IP heißt: "Internet Internet Protocol"


Anmelden zum Antworten