获取 geolock 的用户 ip 地址(不是 192.168 地址)

Posted

技术标签:

【中文标题】获取 geolock 的用户 ip 地址(不是 192.168 地址)【英文标题】:Get user ip address for geolock (not 192.168 address) 【发布时间】:2013-09-21 03:34:14 【问题描述】:

我对我们的程序进行了地理锁定,我们有一项服务可以为我们返回国家代码。但是,如果有人在路由器后面,他们有一个本地 192.168.xx 地址,这并没有告诉我什么。有没有办法在路由器上找到他们的地址?我可以做一个跟踪,但是我需要自己编写逻辑来确定哪些 ip 有用,哪些没有。我在 php 中从服务器执行此代码,而我们的客户端 Web 应用程序在 javascript 中。请指教。

谢谢

【问题讨论】:

如果您的软件在服务器上运行,那么服务器将看到路由器地址,而不是本地地址。您是否发现这是一个问题,或者这是假设性的? 两者兼而有之。我认为这是一个问题,我认为 php _SERVER 标记返回了服务器地址,而不是客户端。也许我读错了文档...... 谷歌“我的 ip 是什么”。其中一些页面甚至会为您返回国家/地区代码。 是的,我做到了。现在我使用 $_SERVER['REMOTE_ADDR'];但它返回“::1”。所以它不可能是正确的。 您需要获取其中一个页面并解析内容以获取 IP 地址。 【参考方案1】:
function get_real_ip() 

    if (!empty($_SERVER['HTTP_X_FORWARED_FOR']))
    
        $client_ip = $_SERVER['HTTP_X_FORWARED_FOR'];
    
    elseif (!empty($_SERVER['HTTP_CLIENT_IP']))
    
        $client_ip = $_SERVER['HTTP_CLIENT_IP'];
    
    else
    
        $client_ip = $_SERVER['REMOTE_ADDR'];
    
    return $client_ip;

【讨论】:

【参考方案2】:

对于基于服务器的软件,PHP 变量 $_SERVER['REMOTE_ADDR'] 将给出客户端的地址。对于路由器后面的客户端,它们的地址将由路由器固件转换,因此服务器将看到路由器的公共 IP 地址,而不是客户端的本地私有地址。

所有这一切都被可能存在的干预代理服务器进一步混淆,这些代理服务器可能会或可能不会告诉您他们的客户端地址是什么。您可以查看 $_SERVER['HTTP_X_FORWRDED_FOR'] 或 $_SERVER['HTTP_CLIENT_IP'](如果存在)。如果没有,您将不得不使用代理地址。

【讨论】:

以上是关于获取 geolock 的用户 ip 地址(不是 192.168 地址)的主要内容,如果未能解决你的问题,请参考以下文章

如何获取网站用户的真实IP

PHP获取用户真实IP地址

如何获取用户的真实IP

获取CDN用户真实IP

ASP.NET Core 3.1 - 如何获取客户端的 IP 地址?

自动获取ip地址失败怎么解决