asp函数代码:复制代码 代码如下:function
checkip’用正则判断IP是否合法dim re1set re1=new
RegExpre1.pattern=”^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$”re1.global=falsere1.Ignorecase=falsecheckip=re1.testset
re1=nothingend function

大家一般都是用$_SERVER[‘REMOTE_ADDR’]来获取用户IP,
但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。
经过我的研究有两种方法来获取用户的真实外网IP。 方法一:curl 复制代码 代码如下: function get_onlineip() {
$ch = curl_init(”); curl_setopt($ch,
CURLOPT_RETURNTRANSFER, true); $a = curl_exec; preg_match]/’, $a,
$ip); return $ip[1]; }
方法二:$_SERVER[‘HTTP_X_FORWARDED_FOR’]来获取相应的地址 复制代码 代码如下: function get_onlineip() {
$onlineip = ”; if(getenv && strcasecmp(getenv, ‘unknown’)) { $onlineip
= getenv; } elseif(getenv(‘HTTP_X_FORWARDED_FOR’) &&
strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR’), ‘unknown’)) { $onlineip =
getenv(‘HTTP_X_FORWARDED_FOR’); } elseif && strcasecmp, ‘unknown’)) {
$onlineip = getenv; } elseif(isset($_SERVER[‘REMOTE_ADDR’]) &&
$_SERVER[‘REMOTE_ADDR’] && strcasecmp($_SERVER[‘REMOTE_ADDR’],
‘unknown’)) { $onlineip = $_SERVER[‘REMOTE_ADDR’]; } return
$onlineip; }

最简单的做法

function get_cli_ip()’取真实IP函数,先 HTTP_CLIENT_IP 再
HTTP_X_FORWARDED_FOR 再 REMOTE_ADDRdim client_ipif
checkip(Request.ServerVariables=true thenget_cli_ip =
checkip(Request.ServerVariableselseMyArray =
split(Request.ServerVariables(”HTTP_X_FORWARDED_FOR”),”,”)if
ubound>=0 thenclient_ip = trimif checkip=true thenget_cli_ip =
client_ipexit functionend ifend ifget_cli_ip =
Request.ServerVariablesend ifend function

 代码如下

discuz论坛取真实IP的php代码,其它类似,请参考稍做修改

function getRealIpAddr()
{
  if (!emptyempty($_SERVER[‘HTTP_CLIENT_IP’]))
  {
    $ip=$_SERVER[‘HTTP_CLIENT_IP’];
  }
  elseif (!emptyempty($_SERVER[‘HTTP_X_FORWARDED_FOR’]))
  //to check ip is pass from proxy
  {
    $ip=$_SERVER[‘HTTP_X_FORWARDED_FOR’];
  }
  else
  {
    $ip=$_SERVER[‘REMOTE_ADDR’];
  }
  return $ip;
}

(discuz修改include/common.inc.php)用以下这段代码:复制代码 代码如下:if(getenv &&
strcasecmp(getenv,’unknown’)) {$onlineip = getenv;}
elseif(getenv(‘HTTP_X_FORWARDED_FOR’) &&
strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR’),

这个我自己写的

‘unknown’)) {

 

$testip = explode(‘.’, getenv(‘HTTP_X_FORWARDED_FOR’));

 代码如下

发表评论

电子邮件地址不会被公开。 必填项已用*标注