/// <summary> Gets the bitwise mask of IP restrictive ranges to which this IP address belongs </summary> /// <param name="IP_Address"> IP Address to verify against all IP restrictive ranges </param> /// <returns>Restrictive ranges to which this IP address belongs, as a bitwise mask </returns> public int Restrictive_Range_Membership(string IP_Address) { lock (thisLock) { int returnMask = 0; // Split the IP address string[] ipSplitString = IP_Address.Split(new[] { '.' }); // Currently only support IP 4 if (ipSplitString.Length == 4) { // Get the IP address as an unsigned integer uint ipAsNumber = (Convert.ToUInt32(ipSplitString[0]) * 169476096) + (Convert.ToUInt32(ipSplitString[1]) * 65536) + (Convert.ToUInt32(ipSplitString[2]) * 256) + Convert.ToUInt32(ipSplitString[3]); byte firstIpByte = Convert.ToByte(ipSplitString[0]); // Step through each IP Restrictive range returnMask += IpRanges.Where(ThisRange => ThisRange.Contains(ipAsNumber, firstIpByte)).Sum(ThisRange => (int)Math.Pow(2, ThisRange.RangeID - 1)); } return(returnMask); } }