仅对美国位置使用 GeoIP 并非 100% 准确

Posted

技术标签:

【中文标题】仅对美国位置使用 GeoIP 并非 100% 准确【英文标题】:Using GeoIP only for US locations not 100% accurate 【发布时间】:2013-01-17 16:39:48 【问题描述】:

我有一个为使用 GeoIP 数据库而构建的模块。我使用它来获取访问网站的用户的位置,我们可以提供从 YQL 天气中提取的他们所在城市(仅限美国)的当前天气。我发现这个https://***.com/questions/12365078/best-way-to-get-location-weather-details-accurately 如果不让用户输入他们的位置,它的读数不会很准确。

到目前为止,已成功显示 90% 的正确位置,有时我们必须更新 DHCP 租约才能获得正确的位置......但我的客户仍然无法在他们的办公室中找到正确的城市。我对他们的网络连接不太了解,但我想知道它是否正在被转发等等......

这是我在模块上获取用户 IP 的方式:

function getIpAddresses() 
   $ipAddresses = array();
   if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) 

  $ipAddresses['proxy'] = isset($_SERVER["HTTP_CLIENT_IP"]) ? $_SERVER["HTTP_CLIENT_IP"] : $_SERVER["REMOTE_ADDR"];
  $ipAddresses['user'] = $_SERVER["HTTP_X_FORWARDED_FOR"];

   else 
  $ipAddresses['user'] = isset($_SERVER["HTTP_CLIENT_IP"]) ? $_SERVER["HTTP_CLIENT_IP"] : $_SERVER["REMOTE_ADDR"];
  
   return $ipAddresses;
  

有没有更好的方法来获取 IP/提高准确性而不要求用户输入他们的位置? 谢谢!

【问题讨论】:

【参考方案1】:

你有几个选择:

寻找更好的 GeoIP 数据提供者。有几家免费数据提供商,根据我的经验,他们在国家/地区级别等方面非常出色,因为您需要查看商业解决方案的粒度更细。 记录他们所在的 IP,即使他们正在更新他们的 IP,他们也可能停留在特定的子网中。将子网硬编码到正确的位置。 合并一个 javascript 位置 API,并将该数据发送到服务器。如果客户端计算机是笔记本电脑,它可能提供比简单 GeoIP 更好的位置信息。

【讨论】:

以上是关于仅对美国位置使用 GeoIP 并非 100% 准确的主要内容,如果未能解决你的问题,请参考以下文章

我应该保存 GeoIP 数据吗

如何更正 maxmind GeoIP 位置?

如何测试基于IP的地理位置(需要测试美国各个州,而不仅仅是低于48)

最准确的城市级 GeoIP 跟踪服务?

基于美国州的重定向页面,使用 Maxmind geoip2 JS

GeoIP 重定向 欧盟 美国 英国