Acho que o que você está procurando é um banco de dados geo-IP. Maxmind disponibiliza um.
Se você estiver usando Debian você pode instalar geoip-database
e geoip-bin
para obter o banco de dados e utilitários de consulta de linha de comando.
Existem bibliotecas disponíveis em vários idiomas:
-
libgeo-ip-perl
-
php5-geoip
-
python-geoip
-
tclgeoip
Assim como um módulo do Apache:
-
libapache2-mod-geoip
Com base no seu comentário, veja algumas explicações:
Os endereços IP são globalmente organizados pela IANA. A IANA distribui blocos de endereços para Registros de Internet Regionais (por exemplo, ARIN, RIPE, etc.). O RIR delega blocos de endereços para Registros da Internet Locais (organizações) ou Registros Nacionais da Internet (nações).
Assim, cada IP pode ser correlacionado a um país específico da forma mais básica. Quando um bloco de endereço é registrado, a entidade registradora é obrigada a listar um endereço físico. Em muitos / a maioria dos casos, isso traz para dentro de uma área metropolitana. Estes são dados públicos, e provavelmente são precisos o suficiente para assustar o bejezuz de uma parcela não insignificante da população.
Indo além, o Maxmind provavelmente agrega dados de uso de vários lugares. Não tenho nenhum conhecimento específico das práticas de negócios da Maxmind, mas as seguintes são várias maneiras de localizar um IP específico:
- Uso e tráfego que fornece o endereço (sempre enviado para o mesmo endereço físico, sempre obtenha direções de / para o mesmo endereço físico).
- Wardriving (o Google fez muito isso, assim como o Skyhook).
- Provedores de cabo / DSL obviamente sabem a localização exata de cada IP que atribuem e provavelmente podem ser persuadidos a compartilhar essas informações dentro de uma milha pelo preço certo.
Etc ..
Os endereços IP geralmente não mudam muito a localização (se alguma vez). Novos IPs são adicionados à lista o tempo todo (pelo menos até ficarmos sem eles), mas geralmente IPs bem estabelecidos não estão indo para uma nova cidade ou estado. Portanto, quanto mais tempo estiver no banco de dados, mais confiável será o local estimado.