使用最新的GeoLite2 IP数据库搜索IP 54.73.154.147,结果如下:
美国西雅图
但IP地址实际上来自爱尔兰的AWS服务器。如果我向GeoIP精确测试页面(https://www.maxmind.com/en/geoip-demo)提交相同的IP,则得到正确的结果:
爱尔兰爱尔兰都柏林
有人能想到为什么我会得到如此错误的结果吗?
发布于 2015-03-26 01:03:33
你之所以会得到两种不同的结果,是因为它们只是不同版本的数据库,而你在它们的网络界面上搜索的结果显然更准确,也更最新。GeoLite2不是很精确,您需要每周更新它才能收到准确的信息,因为IP地址每分钟都在变化。例如,我购买了一些IP地址,我可以使用一个今天和明天转移到另一个我喜欢。更大的公司更经常这样做,而且这些IP地址大部分可以从一个国家转移到另一个国家。
如果您只想继续使用MaxMind产品,可以使用这个url请求json:
https://www.maxmind.com/geoip/v2.1/city/{{ip.address}}?use-downloadable-db=1&demo=1
请注意,理论上每天只允许25次请求(但很容易被破解)。不要问我如何破解它,因为它违反了Stackoverflow的规则。
发布于 2014-10-09 17:05:48
正如迈克尔所指出的那样,如果海泡石的数据库是错误的,你什么也做不了。这是她的另一种选择:userinfo.io。它实际上是几个数据库的合并,所以它可以更精确。
我用你的IP测试了它,它返回了正确的位置。
{
"ip_address": "54.73.154.147",
"position": {
"latitude": 53.3331,
"longitude": -6.2489
},
"continent": {
"name": "Europe",
"code": "EU"
},
"country": {
"name": "Ireland",
"code": "IE"
},
"city": {
"name": "Dublin"
}
}您目前可以使用javascript包装器或java包装器。
发布于 2018-03-30 11:29:49
我也有同样的问题。我的EC2服务器在爱尔兰,但是geoip显示给我们。
我转向了freegeoip.net,这对于这个案例来说似乎是正确的。
PHP中的一个使用示例:
$json_data = file_get_contents("http://freegeoip.net/json/" . $hostname);
return json_decode($json_data, TRUE);https://stackoverflow.com/questions/26234647
复制相似问题