我的网站上有一个密码更改页面,我想限制访问IP范围,例如10.0.0.0 - 10.255.255.255(10/8前缀).
当用户进入页面时,它将检查用户是否在此IP范围内.如果用户在范围内,则显示欢迎消息; 如果没有,那么它会将用户重定向到登录页面.
IP地址从0x00000000到0xFFFFFFFF.
因此,检查用户IP是否在0A000000和0AFFFFFF(十六进制)之间.
更新:演示应用程序:
给定IP地址abcd,您可以使用以下方法计算其值:
a*2^24 + b*2^16 + c*2^8 + d*2^1
或缩短为
a*16777216 + b*65536 + c*256 + d
或十六进制
a*0x10000 + b*0x1000 + c*0x100 + d
以下示例使用此方法查找IP地址的值.这通常包含在套接字实现中,但似乎已被Microsoft(IPAdress.Address)弃用.
using System; using System.Net; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var ip_range_from = IPAddress.Parse("10.0.0.0"); Console.WriteLine("From IP {0}, long value {1}", ip_range_from, GetLongIP(ip_range_from)); var ip_range_to = IPAddress.Parse("10.255.255.255"); Console.WriteLine("To IP {0}, long value {1}", ip_range_to, GetLongIP(ip_range_to)); var ip_query_fail = IPAddress.Parse("159.4.1.1"); Console.WriteLine("ValidIP({0}) returned {1} ", ip_query_fail, ValidIP(ip_range_from, ip_range_to, ip_query_fail) ); var ip_query_ok = IPAddress.Parse("10.17.110.12"); Console.WriteLine("ValidIP({0}) returned {1} ", ip_query_ok, ValidIP(ip_range_from, ip_range_to, ip_query_ok) ); Console.Read(); // wait ;) } private static bool ValidIP(IPAddress From, IPAddress To, IPAddress IP) { var LongIP = GetLongIP(IP); return (LongIP > GetLongIP(From) && LongIP < GetLongIP(To)); } private static long GetLongIP(IPAddress IP) { var bytes = IP.GetAddressBytes(); long LongIP = bytes[0] * 0x10000 + bytes[1] * 0x1000 + bytes[2] * 0x100 + bytes[3]; return LongIP; } } }