GeoIp es una aplicación/base de datos desarrollada por MaxMind que permite a partir de la IP de un ordenador obtener su ubicación geográfica a nivel de país o incluso ciudad (Over 99.5% on a country level and 78% on a city level for the US within a 40 kilometer radius.).
Existe una versión comercial y una gratuita distribuida bajo licencia Creative Commons y que se compone de dos archivos, el más elemental (GeoIP.dat 1,3Mg) nos permite obtener el país de origen, el más completo (GeoLiteCity.dat 21Mg) la ciudad donde está registrada dicha IP.
La fórmula más sencilla para instalarlos sería hacer algo como:
wget -N -q http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget -N -q http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gzip -d GeoIP.dat.gz
gzip -d GeoLiteCity.dat.gz
mkdir /var/lib/GeoIP
mv GeoLiteCity.dat /var/lib/GeoIP/GeoIP.dat
mv GeoLiteCity.dat /var/lib/GeoIP/GeoLiteCity.dat
Cliente GeoIP
Una vez instalado estas dos archivos solo necesitaríamos un cliente que consulte dicha base de datos y los tienes disponibles en los lenguajes más habituales: C, mod_Apache, PHP, JAVA, Javascript, Ruby, etc. Tanto los anteriores archivos DAT como los clientes los he instalado en openSuse 11.4 usando el repositorio Opensuse GEOIP para evitar compilar el módulo Apache en el que estaba interesado.
Una vez instalados los archivos .dat y los binarios, para hacer una consulta bastaría hacer en una consola
~> geoiplookup -f /var/lib/GeoIP/GeoLiteCity.dat 183.203.16.8
~> GeoIP City Edition, Rev 1: CN, 22, Beijing, N/A, 39.928902, 116.388298, 0, 0