string VisitIP=Request.UserHostAddress.ToString();
string limitStrartIP=System.Configuration.ConfigurationSettings.AppSettings["IP_Limit_Start"].ToString(); //从配置文件中拿到的起始IP段为192.168.10.X;192.168.128.X
string limitEndIP=System.Configuration.ConfigurationSettings.AppSettings["IP_Limit_End"].ToString();   //从配置文件中拿到的终止IP段为192.168.70.X;192.168.168.X   与起始对应
string[] ArrayVisitIP=VisitIP.Split('.');
string[] ArrayStrartIP=limitStrartIP.Split(';');
string[] ArrayEndIP=limitEndIP.Split(';'); string[][] numS=new string[ArrayStrartIP.Length][];  //定义一个二维数组接收以.分给的字段
string[][] numE=new string[ArrayEndIP.Length][]; for(int i=0;i<ArrayStrartIP.Length;i++)
{
string[] ArrayIPS=ArrayStrartIP[i].Split('.');
string[] ArrayIPE=ArrayEndIP[i].Split('.'); for(int j=0,k=0;j<ArrayIPS.Length;j++,k++)
{
numS[i]=new string[ArrayIPS.Length];
numE[i]=new string[ArrayIPE.Length]; numS[i][j]=ArrayIPS[j].ToString();
numE[i][j]=ArrayIPE[j].ToString();//这个可以将IP段内以.分割的字段全部拿到,即numS[0][0]=192,numS[0][1]=168,numS[0][2]=10,numS[0][3]=X;
numS[1][0]=192,numS[1][1]=168,numS[1][2]=128,numS[0][3]=X;等
//如何将这些字段与我获得到的访问机器IP字段ArrayVisitIP[0],ArrayVisitIP[1]...做比较判断,从而限制IP段的访问??

}

解决方案 »

  1.   

    static void Main(string[] args)
    {
        //Test1();
        var startIPs = new[] { "192.168.1.0", "127.1.1.1" };
        var endIPs = new[] { "192.168.11.100", "127.100.1.1" };
        var visitIP = "192.168.1.33"; //true
        var check = CheckIP(visitIP, startIPs, endIPs);
        Console.WriteLine(check);
        visitIP = "127.101.1.1"; //false
        check = CheckIP(visitIP, startIPs, endIPs);
        Console.WriteLine(check);
        Console.Read();
    }public static bool CheckIP(string visitIP, string[] startIPs, string[] endIPs)
    {
        for (int i = 0; i < startIPs.Length; i++)
        {
            var startIP = PaddingIP(startIPs[i]);
            var endIP = PaddingIP(endIPs[i]);
            var checkIP = PaddingIP(visitIP);
            if (string.Compare(startIP, checkIP) <= 0 && string.Compare(checkIP, endIP) <= 0)
                return true;
        }
        return false;
    }public static string PaddingIP(string ip)
    {
        string[] subs = ip.Split(new[] { '.' });
        string paddedIP = "";
        Array.ForEach(subs, s => paddedIP += s.PadLeft(3, '0'));
        return paddedIP;
    }