博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#获取IP地址
阅读量:5145 次
发布时间:2019-06-13

本文共 1996 字,大约阅读时间需要 6 分钟。

public string GetUserIP()

   {
        string _userIP;
       if(Request.ServerVariables["HTTP_VIA"] == null)
         {
              userIP= Request.UserHostAddress;
       }
      else
        {
          userIP= Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
      }
      return userIP;
  }
---------------------------------------------------------------------------
//下面这个比较全的 ,能够穿多层代理的,引用人的
    public static string IPAddress
    {
        get
        {
            string result = String.Empty;
            result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (result != null && result != String.Empty)
            {
                //可能有代理
                if (result.IndexOf(".") == -1)    //没有“.”肯定是非IPv4格式
                    result = null;
                else
                {
                    if (result.IndexOf(",") != -1)
                    {
                        //有“,”,估计多个代理。取第一个不是内网的IP。
                        result = result.Replace(" ", "").Replace("'", "");
                        string[] temparyip = result.Split(",;".ToCharArray());
                        for (int i = 0; i < temparyip.Length; i++)
                        {
                            if ( IsIPAddress(temparyip[i])
                                && temparyip[i].Substring(0, 3) != "10."
                                && temparyip[i].Substring(0, 7) != "192.168"
                                && temparyip[i].Substring(0, 7) != "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["REMOTE_ADDR"];
            if (null == result || result == String.Empty)
                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            if (result == null || result == String.Empty)
                result = HttpContext.Current.Request.UserHostAddress;
            return result;
        }
    }
    public static bool IsIPAddress(string str1)
    {
        if (str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15) return false;
        string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$";
        Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
        return regex.IsMatch(str1);

转载于:https://www.cnblogs.com/jf-guo/p/5251148.html

你可能感兴趣的文章
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
inline函数的总结
查看>>
SPSS-生存分析
查看>>
【Jquery】$.Deferred 对象
查看>>
linux IPC
查看>>
微信公众平台模拟登录自动群发图文消息工具包
查看>>
获取系统GAC
查看>>
[目前未找到题目]扩展KMP模板
查看>>
【转】分布式锁的几种使用方式(redis、zookeeper、数据库)
查看>>
mybatis的批量插入
查看>>
微信公众平台接口,修改分享文案、图片等(前端js部分)
查看>>
HDU 5307 He is Flying (生成函数+FFT)
查看>>
PHP array_combine()
查看>>
浅析C\C++的动态内存管理
查看>>
Python 伪造数据的库:Faker
查看>>
《亿级用户下的新浪微博平台架构》阅读笔记
查看>>
nginx对nodejs服务器的http、https、ws、wss的配置
查看>>
短信中VB.NET编码PDU(一)
查看>>
easybuy项目总结_20180409
查看>>