Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Como determinar IP publica en C++ builder (https://www.clubdelphi.com/foros/showthread.php?t=93374)

MARX 28-08-2018 22:18:27

Como determinar IP publica en C++ builder
 
Hola. Necesito su ayuda. Quisiera saber si hay alguna función en builder c++ para determinar la IP publica (Ip que me asigna el proveedor de internet). Desde ya muchas gracias a quienes me den una mano.

Saludos
MARX

escafandra 28-08-2018 23:15:27

Cita:

Empezado por MARX (Mensaje 528219)
Hola. Necesito su ayuda. Quisiera saber si hay alguna función en builder c++ para determinar la IP publica (Ip que me asigna el proveedor de internet). Desde ya muchas gracias a quienes me den una mano.

Saludos
MARX


No la hay pero puedes leerla de una web que te la devuelva como https://dynupdate.no-ip.com/ip.php


Un ejemplo de como hacerlo:


Código PHP:

char PaginaWebIP1[] = "https://dynupdate.no-ip.com/ip.php";
char PaginaWebIP2[] = "http://www.whatismyip.org/";

//---------------------------------------------------------------------------
// Lee Buffer hasta encontrar una estructura de IP.
// Devuelve true si la encuentra y la copia en IP que debe tener espacio
// para 16 caracteres. 
bool ParsingIP(char *IPcharBufferint Size)
{
   
bool Result false;
   
charpt1 strchr(Buffer'.');
   
charpt2 pt1;
   
charpt3 pt1;

   for(
int n=0n<16n++) IP[n]=0;

   for(;
pt1;){
     
pt2 strchr(pt1+1'.');
     if(
pt2pt3 strchr(pt2+1'.');
     if(
pt1 && pt2 && pt3)
     if((int)
pt2-(int)pt1 && (int)pt3-(int)pt2 5)
     
Result = ((int)pt2-(int)pt1 && (int)pt3-(int)pt2 1);
      
Result Result && ((int)pt1-(int)Buffer<Size) &&  ((int)pt2-(int)Buffer<Size) &&  ((int)pt3-(int)Buffer<Size);
     if(
Result){
       for(
pt1--; isdigit(*pt1); pt1--); pt1++;
       
Result = (*pt1!='.');
       if(
Result){
         for(
pt2--; isdigit(*pt2); pt2--); pt2++;
         
Result = (*pt2!='.');
         if(
Result){
           for(
pt3++; isdigit(*pt3); pt3++); pt3--;
           
Result = (*pt3!='.');
           if(
Resultstrncpy(IPpt1, (int)pt3-(int)pt1+1);
         }
       }
     }
     if(
Result) break;
     
pt1 pt2;
   }

   return 
Result;
}
//---------------------------------------------------------------------------
// Lee la IP de cualquier Web que la de y la busca
AnsiString GGetIP(AnsiString URL)
{
  
HINTERNET hNet;
  
HINTERNET hUrl;
  
int LBuf 512;
  
char *Buffer = new char[LBuf];
  
char IP[16];
  
IP[15] = 0;
  
DWORD BytesRead 0;
  
AnsiString Result "";

  if(
InternetAttemptConnect(0) != ERROR_SUCCESS) return Result;

  if(
URL == ""URL PaginaWebIP1;
  
hNet InternetOpen("agent"INTERNET_OPEN_TYPE_PRECONFIGNULLNULL0);
  
SetCursor(LoadCursor(0IDC_WAIT));
  if (
hNet){
    
hUrl InternetOpenUrl(hNetURL.c_str(), NULL0INTERNET_FLAG_RELOAD0);
    if (
hUrl){
      
ZeroMemory(Buffersizeof(Buffer));
      
// Lee la pagina web...
      
bool IRead;
      
int Solapa 15;
      for(
int S=0;;){
        
IRead InternetReadFile(hUrlBuffer SLBuf-1-S, &BytesRead);
        
Solapa;
        if(
IRead && BytesRead==0) break;
        if(
ParsingIP(IPBufferLBuf)) break;
        
Move(Buffer+LBuf-1-SBufferS);
      }
        
// ¿formato correcto?
        
if(inet_addr(IP)!=INADDR_NONE)
          
Result = (AnsiString)IP;
      
InternetCloseHandle(hUrl);
    }
    
InternetCloseHandle(hNet);
  }
  
SetCursor(LoadCursor(0IDC_ARROW));

  
delete Buffer;
  return 
Result;





Saludos.

MARX 29-08-2018 22:50:34

Gracias escafandra. Lo voy a probar a ver como resulta y te aviso


La franja horaria es GMT +2. Ahora son las 07:57:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi