如果IP位于IP范围之间,则限制IP

roy*_*e41 4 c# ip-address range restriction

好的,这是星期五下午,我已经度过了漫长的一周,所以我会感激一些帮助!目前,我有一个IP范围列表,如下所示:

List<IPRange> ipRanges = new List<IPRange>();

ipRanges.Add(new IPRange { From = "145.36.0.0", To = "145.36.255.255" });
ipRanges.Add(new IPRange { From = "194.183.227.184", To = "194.183.227.191" });
ipRanges.Add(new IPRange { From = "193.131.192.0", To = "193.131.223.255" });
Run Code Online (Sandbox Code Playgroud)

在获得客户端的IP之后,如果它落在这些范围集之间的任何位置,则需要将其重定向到其他位置.

例如,

如果有人使用IP访问了该站点,则192.168.0.1允许他们访问.如果他们访问过145.36.1.0,他们将不被允许访问,因为它介于该列表中的第一个范围之间.

我可以按周期拆分每个IP,并计算范围开始变化的位置,然后进行比较,但这在服务器上会很重.

我知道IP基本上只是十进制数,但我不确定它是如何工作的.

有没有人遇到过这个?

干杯,肖恩.

Esp*_*spo 7

将每个IP地址转换为数字,然后检查用户IP地址是否在这些数字之间.

public double Dot2LongIP(string DottedIP)
{
    int i;
    string [] arrDec;
    double num = 0;
    if (DottedIP == "")
    {
       return 0;
    }
    else
    {
       arrDec = DottedIP.Split('.');
       for(i = arrDec.Length - 1; i >= 0 ; i --)
       {
          num += ((int.Parse(arrDec[i])%256) * Math.Pow(256 ,(3 - i )));
       }
       return num;
    }
}
Run Code Online (Sandbox Code Playgroud)


Kal*_*see 7

我会将IP地址转换为32位数字,然后执行简单的> = From和<=检查它是否在范围内.

例如,192.168.1.1 - > 192*256 ^ 3 + 168*256 ^ 2 + 1*256 + 1.

使用您的值,145.36.0.0 - > 2435055616和145.36.0.0 - > 2435121151.所以145.36.200.30 - > 2435106846,并且属于该范围,因此它是有效的.但是145.35.255.255 - > 2435055615不在范围内(只是勉强),所以它失败了.