How to see if an IP address belongs inside of a range of IPs using CIDR notation?

后端 未结 7 2106
猫巷女王i
猫巷女王i 2020-12-09 08:54

Here I have a static reference the ranges I need to check:

private static List Ip_Range = new List()
{
    \"12.144.86.0/23\",
           


        
7条回答
  •  佛祖请我去吃肉
    2020-12-09 09:38

        public static bool IpIsInRange(string subnet, string ip)
        {
            var splitSubnet = subnet.Split('/');
            var maskBits = 32 - int.Parse(splitSubnet[1]);
            if (maskBits == 32)
            {
                return true;
            }
            var subnetIp = BitConverter.ToInt32(IPAddress.Parse(splitSubnet[0]).GetAddressBytes().Reverse().ToArray(), 0) >> maskBits << maskBits;
            var clientIp = BitConverter.ToInt32(IPAddress.Parse(ip).GetAddressBytes().Reverse().ToArray(), 0) >> maskBits << maskBits;
            return subnetIp == clientIp;
        }
    

提交回复
热议问题