Lokale Ip fürs Internet



  • Jeder PC im Internet bekommt beim Einwählen eine IP zugewiesen.
    Mit dieser IP können sich andere Computer im Internet mit ihm Verbinden.

    Nun will ich die IP eines PC unter der er im Internet zu erreichen ist herausfinden. Wisst ihr wie das geht

    Mit CAsyncSocket::GetSockName is es ein bisschen blöd: erstens funktionierts nur wenn man vorher Connect oder Bind aufruft, zweitens weiß ich ja nicht ob's nicht die IP ist unter der der PC im LAN regestriert ist...



  • Ich verstehe deine Frage nicht ganz... möchtest du hinter einem Router herausfinden welche IP der Router beim Einwählen bekommen hat?



  • Ja, du hast's erfasst



  • ruf aus deinem programm : http://checkip.dyndns.org/ auf und parse das ergebniss



  • Also quasi so:

    CString getHtmlSource(CString url) 
    {       
          CString somecode, s;       
          CInternetSession session; 
          CInternetFile* file = NULL; 
    
          try 
          {       
             file = (CInternetFile*) session.OpenURL(url); 
          } 
          catch (CInternetException* m_pException) 
          {       
             file = NULL; 
             m_pException->Delete(); 
          } 
    
          if(file) 
          {       
             while (file->ReadString(somecode) != NULL) 
             { 
                s = s + somecode; 
             } 
          } 
    
          file->Close(); 
          s.Delete(0,20)
          return s; 
    }
    

    Und schon haste in return Wert die IP



  • Merci, funktioniert.
    Wenn's fertig ist könnt ihr das Ergebnis auf www.xcooperation.de.vu sehen.

    Soll ein Messenger werden der ohne Server funktioniert
    Soll dazu da sein, dass auch Leute die keinen vollen Zugriff auf ihren Hompageserver haben Multiplayerspieler und ähnliches anbieten können



  • Dann dürfte dir dieser Code auch vpn nützen sein

    int CTestDlg::TestString(CString in)
    {
    	bool buchstabe=false,zahl=false,ip=false;
        int r=0,ipcount=0;
        CString ip2,rest;
    
        for (int x = 0;x < in.GetLength();x++)
        {
            if( (in.GetAt(x) > 65 && in.GetAt(x) < 90)||(in.GetAt(x) > 97 &&  in.GetAt(x) < 122))
            {
                buchstabe = true;
            }
    
            if( in.GetAt(x) > 48&& in.GetAt(x) < 59)
            {
                zahl = true;
            }
        }
        if (buchstabe == false && zahl == true)
        {
            ip2 = in;
            while (ip2.Find(".") >0 && ipcount <=3)
            {
                rest = ip2.Left(ip2.Find(".")-1);
                if (rest.GetLength() == 3)
                {ipcount ++;}
                ip2 = ip2.Mid(ip2.Find(".") + 1);
            }
    
            if (ip2.GetLength() == 3 && ipcount == 3)
            {
                r = 4;//IP
            }
            else
            {
                r = 2;//Zahl
            }
        }
    
        else
        {
            if (buchstabe == true && zahl == true)
            {
                r = 3;//Beides
            }
            else
            {
                r = 1; //Buchstaben
            }
        }
    
        return r;
    }
    

    Im rückgabewert steht dann ob es eine IP war oder ein Name. Ist Denk ich für dein Vorhaben ganz sinnig...



  • Danke.

    PS: Wie finde ich die IP heraus, die fürs LAN gilt ??

    Ich bau nämlich aus der Internet-IP eine Art ID:

    IP-Datum-Uhrzeit-ProxyIP

    Ist es ein normaler PC ist IP die Internet-IP und ProxyIP 0.0.0.0
    Ist der PC an einen Proxy angeschlossen ist IP die LAN-IP und Proxy natürlich die InternetIP des Proxies.





  • PS: NIE VERGESSEN http://
    Muss heißen http://checkip.dyndns.org
    Und wenn man mit

    m_pException->GetErrorMessage(err,sizeof(err));
    m_pException->Delete();
    MessageBox(NULL,"Verbindug fehlgeschlagen!","Die IP",MB_OK);
    MessageBox(NULL,err,"Die IP",MB_OK);
    

    den Grund für den Fehler abfragt kann man sich ne Menge Ärger sparen 👍


Anmelden zum Antworten