• ASP.NET获取客户端IP地址


    Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址。

    要想透过代理服务器取得客户端的真实IP地址,就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取。

    不过要注意的事,并不是每个代理服务器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的IP。

    还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用 Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取到的值将是空的。因此,如果要在程序中使用此方法,可以这样处理: 
    ...... 
    userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 
    If userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR") 
    ......

     1 //方法一 
     2 HttpContext.Current.Request.UserHostAddress;
     3 
     4 //方法二 
     5 HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
     6 
     7 //方法三 
     8 string strHostName = System.Net.Dns.GetHostName(); 
     9 string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();
    10 
    11 //方法四(无视代理) 
    12 HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    13 
    14 
    15 客户端:
    16 
    17 //方法五 
    18 var ip = ' <!--#echo var="REMOTE_ADDR"-->'; 
    19 alert("Your IP address is "+ip);
    20 
    21 //方法六(无视代理) 
    22 function GetLocalIPAddress() 
    23 { 
    24     var obj = null; 
    25     var rslt = ""; 
    26     try 
    27     { 
    28         obj = new ActiveXObject("rcbdyctl.Setting"); 
    29         rslt = obj.GetIPAddress; 
    30         obj = null; 
    31     } 
    32     catch(e) 
    33     { 
    34         // 
    35     } 
    36     
    37     return rslt; 
    38 } 

    来自印度的MCT Maulik Patel提供了一种服务端的解决方案,很好:

     1 if(Context.Request.ServerVariables["HTTP_VIA"]!=null) // 服务器, using proxy 
     2 { 
     3       得到真实的客户端地址 
     4     ip=Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();  // Return real client IP. 
     5 } 
     6 else//如果没有使用代理服务器或者得不到客户端的ip  not using proxy or can't get the Client IP 
     7 { 
     8       
     9       //得到服务端的地址 
    10     ip=Context.Request.ServerVariables["REMOTE_ADDR"].ToString(); //While it can't get the Client IP, it will return proxy IP. 
    11 } 
  • 相关阅读:
    三路快排
    双路快排
    随机快排
    快速排序
    双向链表
    单向链表
    堆排序
    二分插入、bisect
    jmockit使用总结-MockUp重点介绍
    java拼接字符串、格式化字符串方式
  • 原文地址:https://www.cnblogs.com/hanc/p/3685957.html
Copyright © 2020-2023  润新知