Sobre todo en proyectos web, es fácil que alguna vez hayas sentido la necesidad de conocer a qué ciudad o territorio pertenece la IP de los visitantes de la web. Esto se puede conocer con cierta precisión debido a que cada territorio tiene preasignado uno o varios bloques de direcciones IP que utilizarán los clientes que se conecten desde allí.
Pues bien, esta tarea se hace más sencilla gracias a las bases de datos gratuitas que nos ofrece MaxMind, en concreto la llamada GeoLite2. Se trata de una base de datos descargable en varios formatos como binario o CSV, en la cual se encuentran los bloque de direcciones IP y la ciudad/estado/país al cual pertenece. Incluso se puede dar el caso de encontrar un bloque de direcciones destinado a las redes satelitales o a simples proxies. Las tablas contenidas son blocks y location, que a continuación se detalla los campos que las componen.
La tabla blocks contiene los bloques de direcciones IP e información relativa a dichos bloques, como puede ser su localización geográfica o el código postal asociado. Esta versión de la base de datos contiene 3.065.258 registros (nov-14). Esta tabla tiene la siguiente estructura:
- network_start_ip (cadena). Dirección IP inicial de la red del bloque. Estos bloques se corresponden con direcciones IPv6. Las direcciones IPv4 están representadas en el formato «::ffff:w.x.y.z».
- network_prefix_length (entero [1-128]). Longitud del prefijo de la red.
- geoname_id (entero). Identificador único para la localización de la red, el cual hace de clave ajena con la tabla location.
- registered_country_geoname_id (entero). El identificador del país en el cual el ISP (Internet Service Provider) ha registrado la red. Este identificador también hace de clave ajena con la tabla location.
- represented_country_geoname_id (entero). El país representado por los usuarios de la dirección IP. Por ejemplo, el país representado por los usuarios de una base militar. Al igual que los dos campos anteriores, este identificador sirve para cruzar con la tabla location.
- postal_code (cadena). Código postal asociado a la dirección IP. Están disponibles para algunas direcciones IP de Australia, Canadá, Francia, Alemania, Italia, España, Suiza, Reino Unido y Estados Unidos. En el caso de Canadá, se guardan los 3 primeros caracteres y en el de Reino Unido de 2 a 4.
- latitude (decimal). La latitud asociada a la red.
- longitude (decimal). La longitud asociada a la red.
- is_anonymous_proxy (booleano). Si la red se trata de un proxy anónimo contendrá un 1. En cualquier otro caso, un 0.
- is_satellite_provider (booleano). Si la red es para un proveedor satelital el cual proporciona sus servicios para varios países, contendrá un 1. En cualquier otro caso, un 0.
Tabla blocks de geoLite2
Respecto a la tabla location, contiene información respecto a las localizaciones (ciudades o países) a las que se hace referencia en la tabla blocks. Esta información describe entre otras cosas en qué continente y país se encuentra la localización. Esta versión contiene 84.291 registros (nov-14). La estructura de la tabla es la siguiente:
- geoname_id (entero). Identificador único de cada localización. Es decir, es la clave primaria de la tabla.
- continent_code (cadena(2)). Código del continente al cual pertenece. Este código puede tener los siguientes valores:
- AF – África
- AS – Asia
- EU – Europa
- NA – América del Norte
- OC – Oceanía
- SA – América del Sur
- continent_name (cadena). Nombre del continente en inglés.
- country_iso_code (cadena(2)). Código del país asociado a la localización, según la norma ISO_3166-1.
- country_name (cadena). Nombre del país en inglés.
- subdivision_iso_code (cadena). Código de hasta tres caracteres conteniendo la región del territorio, para una localización más específica. En otras palabras, este campo sería el código de la provincia o del estado de la localización.
- subdivision_name (cadena). Nombre de la subdivisión (provincia o estado) en inglés.
- city_name (cadena). Nombre de la ciudad en inglés.
- metro_code (entero). Código metro asociado. Sólo están disponibles para las redes de Estados Unidos. Éstos códigos se corresponden con los códigos subministrados por Google Adwords API.
- time_zone (entero). Zona horaria de la localización, de acuerdo con la IANA.
![Tabla location de GeoLite2](https://trellat.es/wp-content/uploads/2015/02/location-195x300.png)
Conociendo la naturaleza de cada campo de ambas tablas, lo más conveniente sería importar estas tablas a la base de datos que se esté utilizando para desde allí, geolocalizar una IP con Max Mind.