获取客户端IPAsp.Net

  1 #region 获取客户端IP地址
  2
  3         /// <summary>
  4         /// 获取客户端IP地址
  5         /// </summary>
  6         /// <returns></returns>
  7         public static string GetIP()
  8         {
  9             string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
 10             if (string.IsNullOrEmpty(result))
 11             {
 12                 result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
 13             }
 14             if (string.IsNullOrEmpty(result))
 15             {
 16                 result = HttpContext.Current.Request.UserHostAddress;
 17             }
 18             if (string.IsNullOrEmpty(result))
 19             {
 20                 return "0.0.0.0";
 21             }
 22             return result;
 23         }
 24
 25         #endregion
 26
 27         #region 取客户端真实IP
 28
 29         ///  <summary>
 30         ///  取得客户端真实IP。如果有代理则取第一个非内网地址
 31         ///  </summary>
 32         public static string GetIPAddress
 33         {
 34             get
 35             {
 36                 var result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
 37                 if (!string.IsNullOrEmpty(result))
 38                 {
 39                     //可能有代理
 40                     if (result.IndexOf(".") == -1)        //没有“.”肯定是非IPv4格式
 41                         result = null;
 42                     else
 43                     {
 44                         if (result.IndexOf(",") != -1)
 45                         {
 46                             //有“,”,估计多个代理。取第一个不是内网的IP。
 47                             result = result.Replace("  ", "").Replace("‘", "");
 48                             string[] temparyip = result.Split(",;".ToCharArray());
 49                             for (int i = 0; i < temparyip.Length; i++)
 50                             {
 51                                 if (IsIPAddress(temparyip[i])
 52                                         && temparyip[i].Substring(0, 3) != "10."
 53                                         && temparyip[i].Substring(0, 7) != "192.168"
 54                                         && temparyip[i].Substring(0, 7) != "172.16.")
 55                                 {
 56                                     return temparyip[i];        //找到不是内网的地址
 57                                 }
 58                             }
 59                         }
 60                         else if (IsIPAddress(result))  //代理即是IP格式
 61                             return result;
 62                         else
 63                             result = null;        //代理中的内容  非IP,取IP
 64                     }
 65
 66                 }
 67
 68                 string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
 69
 70                 if (string.IsNullOrEmpty(result))
 71                     result = HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
 72
 73                 if (string.IsNullOrEmpty(result))
 74                     result = HttpContext.Current.Request.UserHostAddress;
 75
 76                 return result;
 77             }
 78         }
 79
 80         #endregion
 81
 82         #region  判断是否是IP格式
 83
 84         ///  <summary>
 85         ///  判断是否是IP地址格式  0.0.0.0
 86         ///  </summary>
 87         ///  <param  name="str1">待判断的IP地址</param>
 88         ///  <returns>true  or  false</returns>
 89         public static bool IsIPAddress(string str1)
 90         {
 91             if (string.IsNullOrEmpty(str1) || str1.Length < 7 || str1.Length > 15) return false;
 92
 93             const string regFormat = @"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}$";
 94
 95             var regex = new Regex(regFormat, RegexOptions.IgnoreCase);
 96             return regex.IsMatch(str1);
 97         }
 98
 99         #endregion
100
101         #region 获取公网IP
102         /// <summary>
103         /// 获取公网IP
104         /// </summary>
105         /// <returns></returns>
106         public static string GetNetIP()
107         {
108             string tempIP = "";
109             try
110             {
111                 System.Net.WebRequest wr = System.Net.WebRequest.Create("http://city.ip138.com/ip2city.asp");
112                 System.IO.Stream s = wr.GetResponse().GetResponseStream();
113                 System.IO.StreamReader sr = new System.IO.StreamReader(s, System.Text.Encoding.GetEncoding("gb2312"));
114                 string all = sr.ReadToEnd(); //读取网站的数据
115
116                 int start = all.IndexOf("[") + 1;
117                 int end = all.IndexOf("]", start);
118                 tempIP = all.Substring(start, end - start);
119                 sr.Close();
120                 s.Close();
121             }
122             catch
123             {
124                 if (System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.Length > 1)
125                     tempIP = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
126                 if (string.IsNullOrEmpty(tempIP))
127                     return GetIP();
128             }
129             return tempIP;
130         }
131         #endregion  
时间: 2024-08-11 03:23:15

获取客户端IPAsp.Net的相关文章

php获取客户端IP

从Onethink代码里摘出来的 /**  * 获取客户端IP地址  * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字  * @return mixed  */ function get_client_ip($type = 0) {     $type       =  $type ? 1 : 0;     static $ip  =   NULL;     if ($ip !== NULL) return $ip[$type];     if 

Nginx限制IP访问及获取客户端realip实战

做网站时经常会用到remote_addr和x_forwarded_for这两个头信息来获取客户端的IP,然而当有反向代理或者CDN的情况下,这两个值就不够准确了,需要调整一些配置.Nginx作为web服务器 时需要根据源IP地址(remote_addr)进行某些限制,但是假如前端是负载均衡的话,Nginx获得的地址永远是负载均衡的内网地址,虽然可以通过设置x_forwarded_for获取到真实的源IP地址但 是无法针对这个地址进行一些权限设置,及Nginx获取到的remote_addr是没有多

获取客户端的IP地址

/// <summary> /// 获取客户端的IP地址 /// </summary> /// <returns></returns> public static string ClientIP() { string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (result

php 获取客户端ip

1 function getRealIp() { 2 if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) 3 $ip = getenv("HTTP_CLIENT_IP"); 4 else if (getenv("HTTP_X_FORWARDED_FOR") && st

服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebService进行通信.服务器端维护IP白名单列表,只有IP地址在白名单中的客户端才可以成功调用到接口,获得服务. 二.代码清单 若要成功获取客户端IP地址,需要如下Jar包的支持. servlet-api.jar axis.jar axis2-kernel-1.6.2.jar 获取IP地址的具体代码如下: i

再论 ASP.NET 中获取客户端IP地址

说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分区域投放等. 1: HttpContext.Current.Request.ServerVariables["HTTP_VIA"]; 2: HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"

javaweb获取客户端真实ip

在安全性要求较高的web项目中,我们经常有这样的需求: 黑名单:禁止指定ip访问. 白名单:允许指定ip访问. 根据ip追踪恶意入侵系统者. 在java中我们通常可以这样获取客户端ip地址: request.getRemoteAddr() 但是这个方法有个弊端,就是如果对方使用了反向代理,那么这个方法获取到的永远都是反向代理服务器的ip,而并非用户的真实ip.这样也能达到禁止访问的目的,但是对于已经发生的恶意入侵,我们却无法定位到真实的用户主机. 当你遇到类似的问题时,那么下面的代码就能够很好的

controller获取客户端请求数据

在学习SpringMVC之前,客户端的请求数据一般是靠request的getParameter方法获取,获取到的数据类型为String类型,需要强制转换为需要的数据类型. 在controller中也可以用这种方式获取客户端数据. //浏览器访问路径为http://127.0.0.1:8001/web02/request?name=name @RequestMapping(path = "/request", method = RequestMethod.GET) public Mode

根据Request获取客户端IP

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了.如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为http://www.xxx.com/ 的URL时,用request.getRemoteAddr() 方法获取的IP地址是:127.0.0.1 或 192.168.1.110 ,而并不是客户