C# 获取IP及判断IP是否在区间

作者:袖梨 2022-06-25

 

 代码如下 复制代码

///

  /// 获取客户端IP

  ///

  ///

  publicstaticstringGetClientIpAddress()

    {

      var httpContext = HttpContext.Current;

      if(httpContext.Request.ServerVariables ==null)

      {

        returnnull;

      }

      var  clientIp = httpContext.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]  ??              httpContext.Request.ServerVariables["REMOTE_ADDR"];

      try

      {

        foreach(var hostAddressinDns.GetHostAddresses(clientIp))

        {

          if(hostAddress.AddressFamily == AddressFamily.InterNetwork)

          {

            returnhostAddress.ToString();

          }

        }

        foreach(var hostAddressinDns.GetHostAddresses(Dns.GetHostName()))

        {

          if(hostAddress.AddressFamily == AddressFamily.InterNetwork)

          {

            returnhostAddress.ToString();

          }

        }

      }

      catch(Exception ex)

      {

 

      }

      returnclientIp;

    }

  ///

  /// ip是否在ip空间内

  ///

  ///

  ///

  ///

  publicstaticBoolean ipExistsInRange(String ip, String ipSection)

  {

    ipSection = ipSection.Trim();

    ip = ip.Trim();

    intidx = ipSection.IndexOf('-');

    String beginIP = ipSection.Substring(0, idx);

    String endIP = ipSection.Substring(idx + 1);

    returngetIp2long(beginIP) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIP);

 

  }

  publicstaticlonggetIp2long(String ip)

  {

    ip = ip.Trim();

    String[] ips = ip.Split('.');

    longip2long = 0L;

    for(inti = 0; i < 4; ++i)

    {

      ip2long = ip2long << 8 | Int64.Parse(ips[i]);

    }

    returnip2long;

  }

  publicstaticlonggetIp2long2(String ip)

  {

    ip = ip.Trim();

    String[] ips = ip.Split('.');

    longip1 = Int64.Parse(ips[0]);

    longip2 = Int64.Parse(ips[1]);

    longip3 = Int64.Parse(ips[2]);

    longip4 = Int64.Parse(ips[3]);

    longip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4;

    returnip2long;

  }

 

相关文章

精彩推荐