Página 1 de 1
IP Publica
Publicado: Jue Oct 25, 2018 2:28 pm
por XeviCOMAS
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.
Re: IP Publica
Publicado: Jue Oct 25, 2018 4:36 pm
por XeviCOMAS
Buscando en foros, sacando algo de allí y algo de los samples de Xailer...
Me respondo a mi mismo.
Código: Seleccionar todo
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.
Re: IP Publica
Publicado: Vie Dic 07, 2018 4:47 pm
por XeviCOMAS
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???
Código: Seleccionar todo
/*
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;
}
Re: IP Publica
Publicado: Dom Dic 09, 2018 1:04 pm
por jfgimenez
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:
Código: Seleccionar todo
<?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.
Re: IP Publica
Publicado: Lun Dic 10, 2018 10:33 am
por XeviCOMAS
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é.