Преобразование маски CIDR в маску IP

Какой самый простой способ преобразовать маску подсети CIDR в стандартную маску IP?

Допустим маска в CIDR 24, тогда мне нужно получить 255.255.255.0.


person ArtemiZ Studio    schedule 03.09.2020    source источник
comment
Размер - это количество двоичных единиц в начале маски. Итак, маска 0xFFFFFF00   -  person jdweng    schedule 03.09.2020
comment
Попробуйте следующее: int maskSize = 24; UInt32 hex = (UInt32)Enumerable.Range(0,maskSize).Sum(x =› (1 ‹‹ (31 - x))); маска строки = строка.Join(., (hex ›› 24).ToString(), ((hex ›› 16) & (0xFF)).ToString(), ((hex ›› 8) & (0xFF)). ToString(), (hex & (0xFF)).ToString());   -  person jdweng    schedule 03.09.2020
comment
Вы также можете сделать последнюю строку следующей: string mask = string.Join(., Enumerable.Range(0, 4).Reverse().Select(x =› ((hex ›› (8 * x)) & 0xFF). Нанизывать()));   -  person jdweng    schedule 03.09.2020


Ответы (1)


using System;
using System.Net;

namespace test2
{
    class Program
    {
        static IPAddress CidrToMask(int cidr)
        {
            int shift = 32 - cidr;
            UInt32 mask;
            if (shift >= 32)
                mask = 0;
            else
                mask = (0xFFFFFFFF << shift) >> shift;

            return new IPAddress(mask);
        }

        static void Main(string[] args)
        {
            for (int i = 0; i <= 32; i++)
                Console.WriteLine("cidr {0}, mask {1}", i, CidrToMask(i).ToString());
        }
    }
}

Вывод результата:

cidr 0, mask 0.0.0.0
cidr 1, mask 1.0.0.0
cidr 2, mask 3.0.0.0
cidr 3, mask 7.0.0.0
cidr 4, mask 15.0.0.0
cidr 5, mask 31.0.0.0
cidr 6, mask 63.0.0.0
cidr 7, mask 127.0.0.0
cidr 8, mask 255.0.0.0
cidr 9, mask 255.1.0.0
cidr 10, mask 255.3.0.0
cidr 11, mask 255.7.0.0
cidr 12, mask 255.15.0.0
cidr 13, mask 255.31.0.0
cidr 14, mask 255.63.0.0
cidr 15, mask 255.127.0.0
cidr 16, mask 255.255.0.0
cidr 17, mask 255.255.1.0
cidr 18, mask 255.255.3.0
cidr 19, mask 255.255.7.0
cidr 20, mask 255.255.15.0
cidr 21, mask 255.255.31.0
cidr 22, mask 255.255.63.0
cidr 23, mask 255.255.127.0
cidr 24, mask 255.255.255.0
cidr 25, mask 255.255.255.1
cidr 26, mask 255.255.255.3
cidr 27, mask 255.255.255.7
cidr 28, mask 255.255.255.15
cidr 29, mask 255.255.255.31
cidr 30, mask 255.255.255.63
cidr 31, mask 255.255.255.127
cidr 32, mask 255.255.255.255
person Ambroyz    schedule 03.09.2020