点关注不迷路

Max

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

    /// <summary>
    /// 获取客户端IP
    /// </summary>
    /// <returns></returns>
    public static string GetClientIpAddress()
        {
            var httpContext = HttpContext.Current;
            if (httpContext.Request.ServerVariables == null)
            {
                return null;
            }

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

            try
            {
                foreach (var hostAddress in Dns.GetHostAddresses(clientIp))
                {
                    if (hostAddress.AddressFamily == AddressFamily.InterNetwork)
                    {
                        return hostAddress.ToString();
                    }
                }

                foreach (var hostAddress in Dns.GetHostAddresses(Dns.GetHostName()))
                {
                    if (hostAddress.AddressFamily == AddressFamily.InterNetwork)
                    {
                        return hostAddress.ToString();
                    }
                }
            }
            catch (Exception ex)
            {
                
            }

            return clientIp;
        }


    /// <summary>
    /// ip是否在ip空间内
    /// </summary>
    /// <param name="ip"></param>
    /// <param name="ipSection"></param>
    /// <returns></returns>
    public static Boolean ipExistsInRange(String ip, String ipSection)
    {

        ipSection = ipSection.Trim();

        ip = ip.Trim();

        int idx = ipSection.IndexOf('-');

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

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

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

    }

    public static long getIp2long(String ip)
    {

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

        long ip2long = 0L;

        for (int i = 0; i < 4; ++i)
        {

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

        }

        return ip2long;
    }

    public static long getIp2long2(String ip)
    {

        ip = ip.Trim();

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

        long ip1 = Int64.Parse(ips[0]);

        long ip2 = Int64.Parse(ips[1]);

        long ip3 = Int64.Parse(ips[2]);

        long ip4 = Int64.Parse(ips[3]);



        long ip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4;

        return ip2long;

    }

 

posted @ 2017-02-16 22:31  Max麦克斯  阅读(969)  评论(0编辑  收藏  举报