In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

IP Publica

Foro de Xailer profesional en español
User avatar
XeviCOMAS
Posts: 524
Joined: Sat Mar 12, 2011 8:16 pm

IP Publica

Postby XeviCOMAS » Thu Oct 25, 2018 2:28 pm

Lo he estado buscando... pero o no está o no lo encuentro.

Alguien tiene una función en Xailer/Harbour o un Wrapper para conocer la IP pública???

Gracias.
Un Saludo,
Xevi.
User avatar
XeviCOMAS
Posts: 524
Joined: Sat Mar 12, 2011 8:16 pm

Re: IP Publica

Postby XeviCOMAS » Thu Oct 25, 2018 4:36 pm

Buscando en foros, sacando algo de allí y algo de los samples de Xailer...

Me respondo a mi mismo.

Code: Select all

Function PublicIP()
   LOCAL hData, cData
   LOCAL cResponse := ""

   WITH OBJECT TInternet():New()
      IF :Open()
         IF !Empty( hData := :OpenURL( "http://checkip.dyndns.org" ) )
            WHILE :ReadFile( hData, @cData, 65536 )
               cResponse += cData
            ENDDO
            :CloseURL( hData )
         ENDIF
         :Close()
      ENDIF
   END

Return allTrim( substr( substr( cResponse, rat( "<body>", cResponse ) + 26 ), 1, At( "<", substr( cResponse, rat( "<body>", cResponse ) + 26 ) ) - 1 ) )




Por si a alguno le interesa o necesita, esto sirve perfectamente para saber cual es nuestra IP pública.
Un Saludo,
Xevi.
User avatar
XeviCOMAS
Posts: 524
Joined: Sat Mar 12, 2011 8:16 pm

Re: IP Publica

Postby XeviCOMAS » Fri Dec 07, 2018 4:47 pm

He encontrado la clase en C para la IPpublica.
Se ve que dan permiso para publicarla...
No puedo hecharla a andar para Xailer.

Se podria incorporar para Xailer, no???

Code: Select all

/*
Autor : Albeiro Valencia
: IP externo
Fecha : 30/07/2018
Todos los derechos reservados
albeiroval@gmail.com

Se llama asi..
IpExterna:=IPPUBLIC()
*/   

#include <stdio.h>
#include <urlmon.h>
#include <WinInet.h>

#include "hbapi.h"

#pragma comment(lib, "urlmon.lib")

//-----------------------------------//

char *GetIP();
bool IsLanOrModem();

//-----------------------------------//

HB_FUNC( IPPUBLIC )
{
char *pszChar = "";

strcpy( pszChar, GetIP() );

hb_retc( pszChar );
}

//-----------------------------------//

char *GetIP()
{
char szPath[256], szRead[128], szRet[256];
char szSite[] = "http://checkip.dyndns.org/Current IP Check.htm";
char *Token;
char *cRet;

memset(szPath,0,sizeof(szPath));
memset(szRet,0,sizeof(szRet));

GetTempPath(256, szPath);
strcat(szPath, "my_ip.txt");

if( URLDownloadToFile(0, szSite, szPath, 0, 0) == S_OK )
{
FILE *fIpHtm = fopen(szPath, "r");
if( fIpHtm )
{
fgets(szRead, 128, fIpHtm);
Token = strrchr(szRead, ':');
Token = strtok(Token, "<");
memcpy(szRead, Token + 2, sizeof(szRead));
strcpy(cRet, szRead);

return cRet;
}
else
{   
return "Error.";
}   
}
else
return "Error.";
}

//-----------------------------------//

HB_FUNC( ISLANCONEXION )
{
hb_retl( IsLanOrModem() );
}

//-----------------------------------//

bool IsLanOrModem()
{
DWORD result;

if (!InternetGetConnectedState(&result, 0))
return false;

return result & INTERNET_CONNECTION_LAN || result & INTERNET_CONNECTION_MODEM;
}
Un Saludo,
Xevi.
User avatar
jfgimenez
Site Admin
Posts: 5620
Joined: Mon Apr 06, 2015 8:48 pm
Contact:

Re: IP Publica

Postby jfgimenez » Sun Dec 09, 2018 1:04 pm

Xevi,

por lo que veo en el fuente, esta rutina depende de otras librerías, y yo no creo que tengamos ninguna necesidad de crear más dependencias.

La runtina anterior que pusiste es más que suficiente, y debería de funcionar perfectamente. Y si no quieres depender de un servidor ajeno para comprobar la IP, siempre puedes colgar el siguiente script de PHP en tu propio servidor:

Code: Select all

<?php
if ( !empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) )
   echo $_SERVER[ 'HTTP_CLIENT_IP' ];
else if ( !empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) )
   echo $_SERVER[‘HTTP_X_FORWARDED_FOR’];
else
   echo $_SERVER[ 'REMOTE_ADDR' ];
?>

Este script te devuelve directamente la IP, y nada más, así que no tienes que ir cortando la cadena ni dependes de que en algún momento cambien el formato de dicha cadena.
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
User avatar
XeviCOMAS
Posts: 524
Joined: Sat Mar 12, 2011 8:16 pm

Re: IP Publica

Postby XeviCOMAS » Mon Dec 10, 2018 10:33 am

Gracias por responder.

Bien, solo era como apunte... si se queria tener la funcion propia en C.
A mi, me sirve de lujo la que reporté.
Un Saludo,
Xevi.

Return to “Spanish”