繁体   English   中英

使用php获取最终用户的IP地址

[英]Get the End User ip address using php

我知道这个问题已经问过很多次了,但是我并没有得到正确的答案。 在这里,我使用以下代码从托管网站获取最终用户系统IP地址。

function ipCheck() {
    if (getenv('HTTP_CLIENT_IP')) {
        $ip = getenv('HTTP_CLIENT_IP');
    }
    elseif (getenv('HTTP_X_FORWARDED_FOR')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    }
    elseif (getenv('HTTP_X_FORWARDED')) {
        $ip = getenv('HTTP_X_FORWARDED');
    }
    elseif (getenv('HTTP_FORWARDED_FOR')) {
        $ip = getenv('HTTP_FORWARDED_FOR');
    }
    elseif (getenv('HTTP_FORWARDED')) {
        $ip = getenv('HTTP_FORWARDED');
    }
    else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
echo ipCheck();

在我的本地网络中,此代码运行良好。 它正确地给了我本地IP 192.168.xxx.xxx。 但是当我在我的网站上运行此代码时,它提供了其他IP地址。

它工作正常。 它会为您提供的IP地址将是您的外部IP地址(转到Google并搜索“我的IP地址是什么”,它应该显示您的外部IP是什么,以便您可以根据需要验证代码是否正确)。

在本地网络外部托管的服务器上使用时,此信息将不会显示您的本地IP地址192.168.xx,因为请求中未提供该信息。 该IP地址仅在您的本地网络上有效。

由于IPv4网络中通常的网络地址转换 ,您无法执行此操作。 这意味着NAT后面的所有IP地址都将显示为单个IP地址(并将成为网关地址),因此,您将只能获得网关地址。

除此之外,还有代理服务器 ,可以隐藏或更改真实客户端(即其网关)地址。 因此,在通常情况下,您的问题的答案是否定的,即不可能。

请记住, HTTP_X_FORWARDED_FOR是非强制性的HTTP请求标头 ,因此可以发送或不发送。 它可以是任何东西(使用Firefox下的LiveHTTPHeaders之类的东西,我可以在此标题中发送“ Hello,world!”,脚本将看到该内容)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM