Determinar el país de origen con la dirección IP
Existen diversos motivos que convierten en muy interesante el hecho de poder conocer el país de origen de los clicks realizados en nuestro sitio Web: para ofrecer una página distinta o en un idioma diferente para cada país, para medir la audiencia de una página según el criterio geográfico, y más generalmente para adaptar la estrategia de comunicación de la empresa a las características geográficas de los usuarios.
Gracias a la base de datos de 4D directamente acoplada con el servidor Web, podemos crear una tabla que contenga una lista de países asociada a un rango de direcciones IP. Esos rangos de direcciones IP se presentan como números que deben ser traducidos a formato IPv4, es decir tipo xxx.xxx.xxx.xxx, para ser comparados con los que recibe el servidor Web de 4D.
¿Cómo funciona?
En nuestro servidor Web recibimos una petición de la dirección IP 200.161.186.92 (en el parámetro 3 de los métodos de base de datos On Web Connection ó On Web Authentication). Este número lo transformamos a 3366042204, que es el equivalente entero de la dirección IP.
Luego buscamos ese número en la tabla de rangos de IP y ésta nos devuelve el siguiente resultado: nuestro visitante viene de Brasil.

¿Qué hay detrás?
Primero debemos conseguir una buena tabla con datos de rangos de direcciones IP y países. Recomendamos la siguiente, que puede descargarse gratuitamente, se actualiza cada mes y viene en formato CSV:
http://www.maxmind.com/app/geoip_country
Estos rangos de direcciones IP son asignados por la ICANN (Internet Corporation for Assigned Names and Numbers) a los países.
Debemos adaptar el archivo descargado a una tabla en nuestra base de datos con la siguiente estructura:

Cuando recibimos una petición de dirección IP, la convertimos de formato A.B.C.D a Numérico (real) y buscamos este número en la tabla IP_Paises para ver en qué rango se encuentra.

Método IP_a_Pais
`Método IP_a_Pais
`Este método recibe una dirección IP en formato A.B.C.D
`la transforma a formato numérico usando el método IP_a_Numerico,
`lo busca en la tabla de rango de IPs y países
`y devuelve el país al cual pertenece la dirección IP solicitadaC_TEXT($1;$0)
C_REAL(v_IP_Num)
v_IP_Num:=IP_a_Numerico($1)QUERY([IP_PAISES];[IP_PAISES]IP_Inicio_Num<=v_IP_Num;*)
QUERY([IP_PAISES]; & ;[IP_PAISES]IP_Fin_Num>=v_IP_Num)If (Records in selection([IP_PAISES])=1)
$0:=[IP_PAISES]Pais
End if
Método IP_a_Numerico
`Método IP_a_Numerico
`Convierte una dirección IP con formato A.B.C.D
`a formato numérico`Declaraciones
C_REAL($0;$vl_IP_A;$vl_IP_B;$vl_IP_C;$vl_IP_D)
C_TEXT($1;$vt_IP_A;$vt_IP_B;$vt_IP_C;$vt_IP_D)
ARRAY TEXT($a_IP;4)`Conversión de la dirección IP a un array de 4 elementos
$vlElem:=0
Repeat$vlElem:=$vlElem+1
$vlPos:=Position(”.”;$1)
If ($vlPos>0)$a_IP{$vlElem}:=Substring($1;1;$vlPos-1)
$1:=Substring($1;$vlPos+1)Else
$a_IP{$vlElem}:=$1
End if
Until ($vlPos=0)
`Conversión de cada elemento del array a real según su posición
$vl_IP_A:=(256^3)*Num($a_IP{1})
$vl_IP_B:=(256^2)*Num($a_IP{2})
$vl_IP_C:=(256^1)*Num($a_IP{3})
$vl_IP_D:=Num($a_IP{4})`Suma de los elementos
$0:=$vl_IP_A+$vl_IP_B+$vl_IP_C+$vl_IP_D
Para saber más:
http://www.4d.com/docs/CMU/CMU02008.HTM
http://es.wikipedia.org/wiki/Direccion_IP
29 Julio, 2007 a las 1:51 am
Bueno pues.. lei este articulo y me interesa descargar el programa.. puede ser util a la hora de investigar quienes intentan conectarse a nuestro ordenador..
ASi que cual es:
¿Nombre del Programa? O El LINk de DEscarga
30 Julio, 2007 a las 11:51 am
Este artículo proponía código fuente para incluir en una aplicación creada con el entorno de programación 4D.
El programa 4D (4th Dimension 2004.6) y toda su documentación se descargan desde la siguiente página:
http://www.4dhispano.com/products/downloads/download_2004demo.html
Si no conoces 4D, la mejor forma de empezar es suscribirte a la oferta 4D Free Edition para poder probar sin compromiso y aprender a tu ritmo sin ningún coste.
http://www.4dhispano.com/ofertas/4dfree.html
25 Agosto, 2007 a las 2:06 pm
buna la info…gracias