Cita:
Empezado por MARX
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 *IP, char* Buffer, int Size)
{
bool Result = false;
char* pt1 = strchr(Buffer, '.');
char* pt2 = pt1;
char* pt3 = pt1;
for(int n=0; n<16; n++) IP[n]=0;
for(;pt1;){
pt2 = strchr(pt1+1, '.');
if(pt2) pt3 = strchr(pt2+1, '.');
if(pt1 && pt2 && pt3)
if((int)pt2-(int)pt1 < 5 && (int)pt3-(int)pt2 < 5)
Result = ((int)pt2-(int)pt1 > 1 && (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(Result) strncpy(IP, pt1, (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_PRECONFIG, NULL, NULL, 0);
SetCursor(LoadCursor(0, IDC_WAIT));
if (hNet){
hUrl = InternetOpenUrl(hNet, URL.c_str(), NULL, 0, INTERNET_FLAG_RELOAD, 0);
if (hUrl){
ZeroMemory(Buffer, sizeof(Buffer));
// Lee la pagina web...
bool IRead;
int Solapa = 15;
for(int S=0;;){
IRead = InternetReadFile(hUrl, Buffer + S, LBuf-1-S, &BytesRead);
S = Solapa;
if(IRead && BytesRead==0) break;
if(ParsingIP(IP, Buffer, LBuf)) break;
Move(Buffer+LBuf-1-S, Buffer, S);
}
// ¿formato correcto?
if(inet_addr(IP)!=INADDR_NONE)
Result = (AnsiString)IP;
InternetCloseHandle(hUrl);
}
InternetCloseHandle(hNet);
}
SetCursor(LoadCursor(0, IDC_ARROW));
delete Buffer;
return Result;
}
Saludos.