Я использовал http://www.hostip.info/ и нашел его действительно хорошим.
MaxMind имеет облегченную версию своих баз данных ip2country и ip2city: http://www.maxmind.com/app/geolitecity
http: / /www.maxmind.com/app/geolitecountry
Если вы не возражаете против размещения базы данных самостоятельно, это бесплатно. Платные услуги более точны.
Они также предоставляют веб-службы для запросов, но это не бесплатно: http://www.maxmind.com/app/web_services#country
У Google есть бесплатный сервис http://briancray.com/2009/05/29/find-web -visitors-location-javascript-google-api /
Геолокация каждого IP-адреса зависит от записей, предоставленных интернет-провайдером. Это никогда не будет полностью надежным, потому что многие интернет-провайдеры указывают местоположение своего офиса вместо физического местоположения своих подсетей, которые могут находиться в другом городе или даже стране.
В некотором смысле, вы не можете достоверно знать местоположение пользователя. Используя советы, приведенные в других ответах, вы сможете определить геолокацию IP-адреса, но нет способа узнать, что к этому IP-адресу в Нью-Йорке, США, не получает доступ через VPN человек, находящийся в командировке в Лондоне, Великобритания, или не использует ли он службу анонимизации, такую как Tor.