コード例 #1
0
        /// <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);
            }
        }