#region 获取客户端IP地址

         /// <summary>
         /// 获取客户端IP地址
         /// </summary>
         /// <returns></returns>
         public static string GetIP()
         {
             string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
             if (string.IsNullOrEmpty(result))
             {
                 result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
             }
             if (string.IsNullOrEmpty(result))
             {
                 result = HttpContext.Current.Request.UserHostAddress;
             }
             if (string.IsNullOrEmpty(result))
             {
                 return "0.0.0.0";
             }
             return result;
         }

         #endregion

         #region 取客户端真实IP

         ///  <summary>
         ///  取得客户端真实IP。如果有代理则取第一个非内网地址
         ///  </summary>
         public static string GetIPAddress
         {
             get
             {
                 var result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                 if (!string.IsNullOrEmpty(result))
                 {
                     //可能有代理
                     )        //没有“.”肯定是非IPv4格式
                         result = null;
                     else
                     {
                         )
                         {
                             //有“,”,估计多个代理。取第一个不是内网的IP。
                             result = result.Replace("  ", "").Replace("'", "");
                             string[] temparyip = result.Split(",;".ToCharArray());
                             ; i < temparyip.Length; i++)
                             {
                                 if (IsIPAddress(temparyip[i])
                                         && temparyip[i].Substring(, ) != "10."
                                         && temparyip[i].Substring(, ) != "192.168"
                                         && temparyip[i].Substring(, ) != "172.16.")
                                 {
                                     return temparyip[i];        //找到不是内网的地址
                                 }
                             }
                         }
                         else if (IsIPAddress(result))  //代理即是IP格式
                             return result;
                         else
                             result = null;        //代理中的内容  非IP,取IP
                     }

                 }

                 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"];

                 if (string.IsNullOrEmpty(result))
                     result = HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];

                 if (string.IsNullOrEmpty(result))
                     result = HttpContext.Current.Request.UserHostAddress;

                 return result;
             }
         }

         #endregion

         #region  判断是否是IP格式

         ///  <summary>
         ///  判断是否是IP地址格式  0.0.0.0
         ///  </summary>
         ///  <param  name="str1">待判断的IP地址</param>
         ///  <returns>true  or  false</returns>
         public static bool IsIPAddress(string str1)
         {
              || str1.Length > ) return false;

             const string regFormat = @"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}$";

             var regex = new Regex(regFormat, RegexOptions.IgnoreCase);
             return regex.IsMatch(str1);
         }

         #endregion

         #region 获取公网IP
         /// <summary>
         /// 获取公网IP
         /// </summary>
         /// <returns></returns>
         public static string GetNetIP()
         {
             string tempIP = "";
             try
             {
                 System.Net.WebRequest wr = System.Net.WebRequest.Create("http://city.ip138.com/ip2city.asp");
                 System.IO.Stream s = wr.GetResponse().GetResponseStream();
                 System.IO.StreamReader sr = new System.IO.StreamReader(s, System.Text.Encoding.GetEncoding("gb2312"));
                 string all = sr.ReadToEnd(); //读取网站的数据  

                 ;
                 int end = all.IndexOf("]", start);
                 tempIP = all.Substring(start, end - start);
                 sr.Close();
                 s.Close();
             }
             catch
             {
                 )
                     tempIP = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[].ToString();
                 if (string.IsNullOrEmpty(tempIP))
                     return GetIP();
             }
             return tempIP;
         }
         #endregion  

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

  1. PHP获取客户端IP

    /** * 获取客户端IP */ function getClientIp() { $ip = 'unknown'; $unknown = 'unknown'; if (isset($_SERVER[ ...

  2. C#服务器获取客户端IP地址以及归属地探秘

    背景:博主本是一位Windows桌面应用程序开发工程师,对网络通信一知半解.一日老婆逛完某宝,问:"为什么他们知道我的地址呢,他们是怎么获取我的地址的呢?" 顺着这个问题我们的探秘 ...

  3. ASP.NET获取客户端、服务器端的信息

    ASP.NET获取客户端.服务器端基础信息 1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取客户端电脑名: ...

  4. 负载均衡的场景下ASP.NET Core如何获取客户端IP地址

    在ASP.NET中,使用负载均衡时,可以通过ServerVariables获取客户端的IP地址. var ip = request.ServerVariables["HTTP_X_FORWA ...

  5. 在Thinkphp3.2.3框架下实现自动获取客户端IP地址的get_client_ip()函数

    在Thinkphp框架下使用get_client_ip()函数获取客户端IP地址十分方便: 一行代码便可以实现:$ip = get_client_ip(); 但当我们测试时会遇到后台获取的IP地址显示 ...

  6. JavaScript获取客户端计算机硬件及系统等信息的方法

    JavaScript获取客户端计算机硬件及系统等信息的方法 JavaScript 获取客户端计算机硬件及系统信息 通过WMI来实现获取客户端计算机硬件及系统信息: function getSysInf ...

  7. .NET 获取客户端的操作系统版本、浏览器版本和IP地址

    我们在使用.NET做网站的时候,很多情况下需要需要知道客户端的操作系统版本和浏览器版本,怎样获取客户端的操作系统和浏览器版本呢?我们可以通过分析UserAgent来获取. .NET 获取客户端的操作系 ...

  8. 根据Request获取客户端IP 内网IP及外网IP

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 ...

  9. Apache 日志管理,获取客户端端口号

    日志管理分类 日志文件是用户管理和监控 Apache 安全的非常好的第一手资料,它清晰地记录了客户端访问 Apache 服务器资源的每一条记录,以及在访问中出现的错误信息,可以这样说,Apache 可 ...

随机推荐

  1. OC-nonatomic和atomic相关

    1.原子和非原子属性1.1>OC在定义属性时又nonatomic和atomic两种选择(1)atomic:原子属性,为setter方法加锁(默认就是atomic)(2)nonatomic:非原子 ...

  2. JavaSE学习总结第24天_多线程2

      24.01  JDK5之后的Lock锁的概述和使用 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK ...

  3. BZOJ 2015: [Usaco2010 Feb]Chocolate Giving( 最短路 )

    裸最短路.. ------------------------------------------------------------------------------------ #include ...

  4. 用jmeter进行多用户并发压力测试 [转]

    近日manager要求对项目进行压力测试,开始对jmeter进行了研究.jmeter是Apache一个开源项目,可对各种项目进行测试,甚至包括junit. 测试要求如下,多用户同时登陆web应用程序, ...

  5. python学习之day9

    队列queue 队列是线程安全的,它保证多线程间的数据交互的一致性. 先进先出队列Queue import queue q = queue.Queue(maxsize=3) #maxsize为队列最大 ...

  6. 转: seajs手册与文档之 -- 模块标识

    目录 模块标识 相对标识 顶级标识 普通路径 文件后缀的提示 模块标识 模块标识是一个字符串,用来标识模块.在 require. require.async 等加载函数中,第一个参数都是模块标识.de ...

  7. 英文:known good assembly(KGA) / 中文:确认好的组装件,已知好组装件

    英文:known good assembly(KGA) / 中文:确认好的组装件,已知好组装件 正确地操作印制板装配,并可作为标准件与其它同类型装配件比较的组装.也称黄金组装.

  8. 解决sqlite删除数据后,文件大小不变问题(VACUUM)

    删除表格的全部数据: DELETE FROM [Name] 当在sqlite中删除了大量数据后,数据库文件的大小还是那样,没有变.原因是:从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的” ...

  9. ACE编译

    (1)下载ACE6.1.0版本,路径如下 http://download.dre.vanderbilt.edu/previous_versions/ACE-6.1.0.tar.gz

  10. ZOJ 2967 Colorful Rainbows 【Stack】

    解决此题方法类似于凸包,先把所有直线按照斜率a由小到大排序 斜率相同取b较大的,扔掉b小的 (可以在遍历的时候忽视).于是所有直线斜率不同. 准备一个栈 (手动模拟), 栈里面存放上一次能看到的“最上 ...