예제 #1
0
        public IPv4SubnetRange(string cidrNotation)
        {
            var networkAddress = IPAddress.Parse(cidrNotation.Split('\\', '/')[0].Trim());
            int cidr           = int.Parse(cidrNotation.Split('\\', '/')[1].Trim());
            var subnetMask     = IPv4TypeConverter.ConvertCidrToSubnetMask(cidr);

            CalculateAndSetValues(networkAddress, subnetMask);
        }
예제 #2
0
        private void CalculateAndSetValues(IPAddress networkAddress, IPAddress subnetMask)
        {
            _networkAddress = networkAddress;
            _subnetMask     = subnetMask;
            _cidr           = IPv4TypeConverter.ConvertSubnetMaskToCidr(subnetMask);

            var networkAddressInt = networkAddress.ToLong();
            var subnetMaskInt     = subnetMask.ToLong();
            // bxor 1s, inverts only the last 24 bits as opposed to ~ which inverts all the bits in an Int64.
            var invertedSubnetMaskInt = subnetMaskInt ^ IPAddress.Broadcast.ToLong();
            var broadcastAddressInt   = networkAddressInt + invertedSubnetMaskInt;

            BroadcastAddress = IPv4TypeConverter.ConvertNumberToIPv4(broadcastAddressInt);
            StartRange       = IPv4TypeConverter.ConvertNumberToIPv4(networkAddressInt + 1);
            EndRange         = IPv4TypeConverter.ConvertNumberToIPv4(broadcastAddressInt - 1);
            RangeSize        = broadcastAddressInt - networkAddressInt;
        }
예제 #3
0
        public IPv4SubnetRange(IPAddress networkAddress, int cidr)
        {
            var subnetMask = IPv4TypeConverter.ConvertCidrToSubnetMask(cidr);

            CalculateAndSetValues(networkAddress, subnetMask);
        }