Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Beatrix - ExternalIp.cpp

ExternalIp.cpp

Caricato da: Piero Tofy
Scarica il programma completo

  1. #include "ExternalIp.h"
  2.  
  3. /* ExternalIp.cpp
  4.  
  5. Si veda il file ExternalIp.h per l'utilizzo delle funzioni
  6. presenti nel modulo */
  7.  
  8. char *GetExternalIp(){
  9.         //Inizializza il socket
  10.         SOCKET s = InitClientSocket(WEBSERVER,WEBPORT);
  11.  
  12.         if (s == 0) return "0.0.0.0\0";
  13.  
  14.         //Inizializza la richiesta
  15.         char *pRequest = new char[0xFF];
  16.         wsprintf(pRequest,"GET / HTTP/1.1\nHost: %s:%d\n\n\0",WEBSERVER,WEBPORT);
  17.        
  18.         //Invia la richiesta
  19.         SendTo(s,pRequest);
  20.  
  21.         //Riceve la risposta...
  22.         char *pBuffer = new char[0xFFF];
  23.         int *iIpDigits = new int[3];
  24.         int res;
  25.  
  26.         do{
  27.                 res = RecvFrom(s,pBuffer);
  28.  
  29.                 //Stiamo leggendo la riga che ci serve?
  30.                 if (strstr(pBuffer,"</TITLE>") != NULL){
  31.                         //Etraiamo l'ip...
  32.                         pBuffer = ExtractIpFromResponse(pBuffer);
  33.  
  34.                         //Usciamo dal ciclo
  35.                         break;
  36.                 }
  37.         }while(res == SERVER_SOCKET_OK);
  38.  
  39.         closesocket(s);
  40.         return pBuffer;
  41. }
  42.  
  43. char *ExtractIpFromResponse(char *pResponse){
  44.         char *pIp = new char[0x10];
  45.         memset(pIp,'\0',0x10);
  46.  
  47.         int iDotsCount = 0;
  48.         bool bDigitFound = false;
  49.  
  50.         for (register int c = 0; c<lstrlen(pResponse) && iDotsCount < 4; c++){
  51.                 //Trovato una cifra dell'ip?
  52.                 if (isdigit(pResponse[c])){
  53.                         wsprintf(pIp,"%s%c",pIp,pResponse[c]); 
  54.                         bDigitFound = true;
  55.  
  56.                 //Trovato un punto?
  57.                 }else if(pResponse[c] == '.' && bDigitFound){
  58.                         wsprintf(pIp,"%s.",pIp);                               
  59.                         iDotsCount++;
  60.                 }
  61.         }
  62.  
  63.         return pIp;
  64. }