随笔 - 118,  文章 - 5,  评论 - 15,  阅读 - 17万

现在很多网站用了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   mrma1989  阅读(5398)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示