如何使用php获取访问者的IP地址

Posted

技术标签:

【中文标题】如何使用php获取访问者的IP地址【英文标题】:How to use php to get ip address of a visitor 【发布时间】:2020-12-12 06:53:20 【问题描述】:

我想获取我的用户的位置,但我不想使用第三方系统来做到这一点 所以我做了这个脚本

    <?php
 function getIPAddress()   
    //whether ip is from the share internet  
     if(!empty($_SERVER['HTTP_CLIENT_IP']))   
                $ip = $_SERVER['HTTP_CLIENT_IP'];  
          
    //whether ip is from the proxy  
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   
                $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];  
       
//whether ip is from the remote address  
    else  
             $ip = $_SERVER['REMOTE_ADDR'];  
       
     return $ip;  
  
$ip = getIPAddress();  
echo $ip; 
?>

当我访问 http://localhost 时它会回显 ::1 然后当我连接到互联网并转到 http://192.168.43.104 它时会回显 192.168.43.104 我在网上看到 192.168.xxx.xxx 是公共 IP并且有数百万用户在使用 192.168.xxx.xxx ,并且无法从中获取我的访问者位置 我的问题是

    真的不能用192.168.xxx.xxx来判断用户位置吗 如果上述脚本无法获取用户位置,我该怎么做 为了清楚起见,我只想要他们的 IP 地址,因为我需要第三方服务来将他们的 IP 地址更改为某个位置,所以我认为最好保留一个数字

编辑 目前在我的页面上它告诉我 192.168.43.104 但如果我用谷歌搜索“我的 ip”,我会得到 197.210.85.238 Your public IP address 是不是从我的公共 IP 地址可以获取我的位置

【问题讨论】:

你首先要明白 ip 不是一个能告诉你用户确切位置的魔法钥匙。 如果你真的想获取用户的位置,你应该使用 GeoIP。 【参考方案1】:

您的服务器只有在您通过 WAN(也称为公共互联网)访问它时才能获知您的公共 IP。

如果您使用以下 IP 访问您的服务器:

10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.31.255.255 192.168.0.0 - 192.168.255.255

请注意,它们是 IANA 为 private networks 保留的 IPv4 地址,它们应该只在路由器后面使用。并且任何路由器都可以免费使用它们(因此它在定位用户地理位置方面没有任何意义)。

由于您仅通过局域网 (LAN) 访问该服务器,因此您的流量根本没有通过公共互联网路由。本地网络流量不包含您要求的公共 IP 信息。

简而言之,请将您的应用程序放在公共服务器上以正确测试您的代码

附:正如其他人指出的那样,geoip 数据永远不会 100% 准确。如果您决定仅根据 IP 确定用户位置,则需要接受您的结果不准确。

【讨论】:

【参考方案2】:

让我回答你的两个问题。

    真的不能用192.168.xxx.xxx来判断用户位置吗

是的,它是一个私有 IP 地址范围。 IP 地理定位服务(例如 IP2Location)仅适用于公共 IP 地址范围。

    如果上述脚本无法获取用户位置,我该怎么做。为了清楚起见,我只想要他们的 IP 地址,因为我需要第三方服务来将他们的 IP 地址更改为一个位置,所以我认为最好留下一个数字

问题不在于您的脚本。一个简单的 $_SERVER['REMOTE_ADDR'];在大多数情况下,应该会获取您的访问者 IP 地址。但是,您需要在 WAN 而不是 LAN 中对其进行测试。例如,您将页面放在位于数据中心的服务器中,然后从办公室的另一个网络访问它。

【讨论】:

以上是关于如何使用php获取访问者的IP地址的主要内容,如果未能解决你的问题,请参考以下文章

如何在Laravel 5+中获取客户端IP地址?

如何在 Laravel 5+ 中获取客户端 IP 地址

使用 PHP 根据 IP 地址获取位置和区域

如何在 PHP 中获取已连接客户端的 MAC 和 IP 地址?

如何使用php获取本机IP地址

php获取ip