从用户 IP 地址获取位置

Posted

技术标签:

【中文标题】从用户 IP 地址获取位置【英文标题】:Get location form a users IP address 【发布时间】:2013-12-01 11:19:06 【问题描述】:

我正在尝试从使用的 IP 地址获取位置。有很多关于如何做到这一点的主题。我真的like this one,它有效并且非常清晰。 示例中使用的 IP 地址找到了德国某处的位置,但是当我使用我的 IP 地址 (192.168.0.7) 时,一切都返回未知。当站点仅在线时,我不会使用我的 IP 地址,我会使用 php 查找用户的 IP 地址。

if (!empty($_SERVER['HTTP_CLIENT_IP'])) 
            $ip = $_SERVER['HTTP_CLIENT_IP'];
         elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
         else 
            $ip = $_SERVER['REMOTE_ADDR'];

        
$ip = '192.168.0.7'; //replace with my IP address

我也遇到过this site,它可以找到我的 IP 地址,除了数字不同之外,它非常准确。 2.126.219.101

有没有一种方法可以测试我在 localhost 上的内容,以使用上述方法获取我的 IP 地址,或者我的 IP 地址有什么问题。

【问题讨论】:

192.168.* 是一个私有 IP 地址。您无法对其进行地理定位,这毫无意义(现在全世界可能有数千台计算机拥有该确切 IP)。使用公共 IP 地址。 理论上如此 if (!empty($_SERVER['HTTP_CLIENT_IP'])) $ip = $_SERVER['HTTP_CLIENT_IP']; elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 其他 $ip = $_SERVER['REMOTE_ADDR']; 将在线工作 【参考方案1】:

192.168.0.7 是您的私有 IP 地址。它仅在您的本地(家庭、工作...)网络内有效。因为它仅在您的本地网络内有效,所以不能用于定位。事实上,目前世界上可能还有数百万其他计算机在它们自己的网络中也拥有这个私有 IP 地址。

2.126.219.101 是您的公共 IP 地址。就本地网络之外的任何机器而言,这就是您的 IP 地址。它可以用来指示位置。

【讨论】:

这是有道理的,但它现在非常准确。例如,我住在英格兰北部,但我在伦敦买了笔记本电脑。我的公共 IP 地址返回伦敦而不是我的实际位置 恐怕这是 IP 定位的本质 - 它并不总是准确的。您的 ISP 可能从一个服务于该国大部分地区的池中分配您的 IP 地址,而不仅仅是您的本地区域。 更好的方法是使用 javascript 并在页面加载后显示数据。会准确很多

以上是关于从用户 IP 地址获取位置的主要内容,如果未能解决你的问题,请参考以下文章

从IP地址获取地理位置[重复]

从 IP 地址获取地理位置

PHP 从 IP 地址获取位置 MaxMind GEOIP

GEOIP 并获取计算机 IP 地址 位置?

苹果是不是允许 ios 应用程序通过 IP 地址获取用户位置

通过网络请求获取当前IP,并得到大致位置