externe ip ( nicht lokale )



  • ok danke nur eine frage noch gibts da eig auch was native und ohne das .netframework? rein aus interesse.



  • Wenn du kein .NET willst wieso postest du dann ins C++/CLI Forum? 😉

    Native kannst du das natürlich selber über Sockets erledigen. Und es gibt natürlich haufenweise Libraries wie z.B. libcurl oder die WinINet Funktionen. Sogar die SFML hat sehr einfache HTTP Funktionalität eingebaut...



  • und das würde gehen wie 🙄 😕



  • Wo genau liegt dein Problem!?



  • ich finde kein einzigen code der mir die richtige ip ausspuckt. und ich wollte auch mal etwas "schweres" probieren und das ohne .net machen



  • Wie willst du die ip denn jetzt bekommen?



  • das ist ja mein problem ich finde nichts und ich bin kein c++ experte wo das auswendig weiß. Deshalb frage ich ja euch.



  • Wir haben dir doch schon ausführlich geantwortet, was genau ist jetzt noch unklar?



  • thefiloe schrieb:

    das ist ja mein problem ich finde nichts und ich bin kein c++ experte wo das auswendig weiß. Deshalb frage ich ja euch.

    Du machst einen Socket auf, verbindest dich über TCP auf Port 80 mit "www.whatismyip.org", schickst einmal:

    "GET / HTTP/1.0\r\n"
    "Host: www.whatismyip.org\r\n"
    "\r\n"
    

    Und empfängst dann bis die Verbindung abbricht. Ich habe hier noch C Code rum fliegen mit dem du das testen könntest:

    #include <stdio.h>
    #include <WinSock2.h>
    
    #pragma comment (lib, "Ws2_32.lib")
    
    void errorexit(int code, const char *msg, ...)
    {
      va_list argv;
      va_start(argv, msg);
      vprintf(msg, argv);
      va_end(argv);
      getchar(); //blah, Windows ;)
      exit(code);
    }
    
    int main()
    {
      char buf[0x1000];
      int sock, rval;
      struct sockaddr_in addr = {0};
      struct hostent *host = 0;
      struct WSAData wsa;
    
      if (WSAStartup(WINSOCK_VERSION, &wsa) != 0)
        errorexit(-1, "WSAStartup() failed with: %i.", 
          WSAStartup(WINSOCK_VERSION, &wsa));
    
      while (!host)
      {
        printf("Server: ");
        fgets(buf, sizeof(buf), stdin);
        buf[strlen(buf) - 1] = '\0';
        host = gethostbyname(buf);
      }
      addr.sin_addr = *(struct in_addr*)host->h_addr;
      addr.sin_family = AF_INET;
      addr.sin_port = htons(80);
    
      buf[0] = '\0';
      puts("Message: (double return to send)");
      while (!strstr(buf, "\n\n"))
      {
        char tmp[0x100];
        fgets(tmp, sizeof(tmp), stdin);
        strcat(buf, tmp);
        if (strlen(buf) > sizeof(buf) - sizeof(tmp))
          break;
      }
    
      sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      if (!sock)
        errorexit(-2, "socket() failed with: %i.", WSAGetLastError());
    
      if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) != 0)
        errorexit(-3, "Could not connect to host: %s. Error: %i.", 
          inet_ntoa(addr.sin_addr), WSAGetLastError());
    
      if (send(sock, buf, strlen(buf), 0) < strlen(buf))
        errorexit(-4, "send() failed with: %i.", WSAGetLastError());
    
      while ((rval = recv(sock, buf, sizeof(buf) - 1, 0)) > 0)
        buf[rval] = '\0', printf("%s", buf);
    
      closesocket(sock);
      WSACleanup();
      getchar();
      return 0;
    }
    


  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET 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.



  • wow danke


Anmelden zum Antworten