1. 首页
  2. 服务器

做了CDN获取用户真实IP的方法 PHP与Asp设置方式

asp取真实IP的代码,搭环境测试无代理、一级或多级代理的情况,可以正常获取


function   checkip(checkstring)'用正则判断IP是否合法
dim   re1
set   re1=new   RegExp
re1.pattern="^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"
re1.global=false
re1.Ignorecase=false
checkip=re1.test(checkstring)
set   re1=nothing
end   function


function   get_cli_ip()'取真实IP函数,先 HTTP_CLIENT_IP 再 HTTP_X_FORWARDED_FOR 再 REMOTE_ADDR
dim client_ip
if checkip(Request.ServerVariables("HTTP_CLIENT_IP"))=true then
         get_cli_ip = checkip(Request.ServerVariables("HTTP_CLIENT_IP"))
else
         MyArray = split(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),",")
         if ubound(MyArray)>=0 then
                   client_ip = trim(MyArray(0))
                   if checkip(client_ip)=true then
                            get_cli_ip = client_ip
                            exit function
                   end if
         end if
         get_cli_ip = Request.ServerVariables("REMOTE_ADDR")
end if
end   function

 

 

 

discuz论坛取真实IP的php代码,其它类似,请参考稍做修改
(discuz修改include/common.inc.php)
用以下这段代码:
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
        $onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),

'unknown')) {
       
        $testip = explode('.', getenv('HTTP_X_FORWARDED_FOR'));

        if ($testip[0]=='192' && $testip[1]=='168') {
                $onlineip = getenv('REMOTE_ADDR');
        }
    elseif($testip[0]=='10') {
                $onlineip = getenv('REMOTE_ADDR');
        }
        else {
                $onlineip = getenv('HTTP_X_FORWARDED_FOR');
        }

        //gamesir hack end} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'),

'unknown')) {
        $onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER

['REMOTE_ADDR'], 'unknown')) {
        //by Johnny
 $tmp_ip = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
 $tmp_ip1 = explode(',',$tmp_ip[0]);
 if ($tmp_ip1[0] == '192' && $tmp_ip1[1] == '168') {
  $onlineip = getenv('REMOTE_ADDR');
 }else if($tmp_ip1[0]=='10') {
                $onlineip = getenv('REMOTE_ADDR');
        }
        else{
                $onlineip = $tmp_ip[0];
        }
 unset($tmp_ip);unset($tmp_ip1);
 
}

替换这段代码:
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
 $onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),

'unknown')) {
 $onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
 $onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER

['REMOTE_ADDR'], 'unknown')) {
 $onlineip = $_SERVER['REMOTE_ADDR'];
}

原创文章,作者:夜风博客,如若转载,请注明出处:https://www.homedt.net/18746.html