现在很多网站用了CDN技术,但采用CDN技术后,原来用来获取访问源的IP地址的程序已不能正常使用,它拿到的并不是访问源的真实IP地址,而是CDN节点的IP地址,解决方法是对获取IP的代码作一点小改动。
 
在没有使用CDN之前,我们如果想在网站程序里拿到浏览者的IP,只需要读取 REMOTE_ADDR 这个服务器变量就行了,而采用CDN后,REMOTE_ADDR 这个变量的值并不是访问源的上网IP地址,而是CDN节点的IP地址,而用户的真实上网IP是放在 HTTP_X_FORWARDED_FOR 这个变量里的,既然这样,我们只需写个兼容性的函数来获取IP地址即可,代码示例如下:
 
 
 
1. asp 的示例代码
 

<%
 
Function GetClientIP()
 
 Dim ip
 
 ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
 
 If(ip <> "") Then
 
  Dim arr
 
  arr = Split(ip,",")
 
  GetClientIP = arr(0)
 
 Else
 
  GetClientIP = Request.ServerVariables("REMOTE_ADDR")
 
 End if
 
End function
 
Response.Write("您的上网IP是:" + GetClientIP())
 
%>

 


 
 
 
2. asp.net 的示例代码
 

private string GetClientIP(){
 
 string ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"] + "";
 
 if(ip  != ""){
 
  string[] arr = ip.Split(',');
 
  return arr[0];
 
 }else{
 
  return Request.ServerVariables["REMOTE_ADDR"];
 
 }
 
}
 
void Page_Load(){
 
 Response.Write("您的上网IP是:" + GetClientIP());
 
}

 


 
 
 
3. php 的示例代码
 

function GetClientIP(){
 
 $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
 
 if($ip != ""){
 
  $arr = explode(",",$ip);
 
  return $arr[0];
 
 }else{
 
  return $_SERVER["REMOTE_ADDR"];
 
 }
 
}
 
echo "您的上网IP是:".GetClientIP();

 

 

posted on 2014-04-23 10:43  mrma1989  阅读(5389)  评论(2编辑  收藏  举报