首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从访客那里获取真实IP?

如何从访客那里获取真实IP?
EN

Stack Overflow用户
提问于 2012-11-30 21:58:41
回答 8查看 292.3K关注 0票数 100

我使用下面的PHP代码来获取访问者的IP地址:

代码语言:javascript
复制
<?php echo $_SERVER['REMOTE_ADDR']; ?>

但是,当访问者使用代理时,我无法从他们那里获得真实的IP地址。在这种情况下,有没有办法获得访问者的IP地址?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-11-30 22:01:14

试试这段php代码。

代码语言:javascript
复制
<?PHP

function getUserIP()
{
    // Get real visitor IP behind CloudFlare network
    if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
              $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
              $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
    }
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}


$user_ip = getUserIP();

echo $user_ip; // Output IP address [Ex: 177.87.193.134]


?>
票数 190
EN

Stack Overflow用户

发布于 2012-11-30 22:08:55

这是我见过的最常见的技术:

代码语言:javascript
复制
function getUserIP() {
    if( array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) ) {
        if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',')>0) {
            $addr = explode(",",$_SERVER['HTTP_X_FORWARDED_FOR']);
            return trim($addr[0]);
        } else {
            return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
    }
    else {
        return $_SERVER['REMOTE_ADDR'];
    }
}

请注意,这并不能保证您将始终获得正确的用户IP,因为有许多方法可以隐藏它。

票数 56
EN

Stack Overflow用户

发布于 2015-03-04 07:36:54

这是我的方法:

代码语言:javascript
复制
 function getRealUserIp(){
    switch(true){
      case (!empty($_SERVER['HTTP_X_REAL_IP'])) : return $_SERVER['HTTP_X_REAL_IP'];
      case (!empty($_SERVER['HTTP_CLIENT_IP'])) : return $_SERVER['HTTP_CLIENT_IP'];
      case (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) : return $_SERVER['HTTP_X_FORWARDED_FOR'];
      default : return $_SERVER['REMOTE_ADDR'];
    }
 }

使用方法:

代码语言:javascript
复制
$ip = getRealUserIp();
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13646690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档