 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Lun 14 Ene, 2019 11:52 am Asunto: una cosa basica para obtener IP Publica |
|
|
Hola a todos, escafandra, Leo o alguien que tenga esto un poco claro a ver si podria ayudarme a obtener la IP Publica de internet del equipo mio
he pensado con esta direccion: http://dynupdate.no-ip.com/ip.php
que devuelve dicha IP pero no se como pasarla a un EditBox |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 16 Ene, 2019 11:40 pm Asunto: |
|
|
De esa pagina es sencillo extraer la IP. De otras que son mas abigarradas en su presentación, es un poco más complejo
El truco será leer la pagina y buscar en el texto una estructura que concuerde con una IP
| Código: |
#include <vcl.h>
#include <winsock2.h>
#include "InetOnLine.h"
#pragma link "wininet.lib"
char PaginaWebIP1[] = "https://dynupdate.no-ip.com/ip.php";
char PaginaWebIP2[] = "http://www.whatismyip.org/";
//"http://checkip.dyndns.org/"
//---------------------------------------------------------------------------
// 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;
}
//---------------------------------------------------------------------------
// 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;
}
|
GGetIP lee la IP de una pagina web dadacon ayuda de ParsingIP que localiza la IP en el texto fuente de la Web propuesta.
Ejemplos:
| Código: |
Label1->Caption = GGetIP(Edit1->Text.c_str());
Label1->Caption = GGetIP("https://dynupdate.no-ip.com/ip.php");
Label1->Caption = GGetIP("http://www.whatismyip.org/"); |
Ese código lo publiqué en Club Delphi, en concreto aquí
Saludos. |
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Jue 21 Feb, 2019 4:37 pm Asunto: |
|
|
| gracias escafandra..... lo solucione el mismo dia jejejej el caso es que ando loco intentando reproducir un stream de radio mp3 en telefono movil android (tengo puesta la consulta por aqui en otro mensaje....crees que puedes ayudarme o avisar a leo??) |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|