Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

una cosa basica para obtener IP Publica

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: una cosa basica para obtener IP Publica Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.