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基本上只是十进制数,但我不确定它是如何工作的.
有没有人遇到过这个?
干杯,肖恩.
将每个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)
我会将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不在范围内(只是勉强),所以它失败了.