Как преобразовать CIDR в сетевой адрес, и IP-адрес располагаются в C#?

Установите в песочницу и скопируйте папку.

15
задан Community 23 May 2017 в 12:00
поделиться

3 ответа

Вот как вы это делаете для своего примера 72.20.10.0 / 24 ,

Пусть Сеть будет 72.20.10.0
Маска будет ~ ((1 << (32-24)) - 1) // или
Маска - это ~ (0xFFFFFFFF >> 24)

  • , которая равна 0xFFFFFF00

StartIP - (Сеть и маска ) ;

  • , который равен 72.20.10.0 & 0xFFFFFF00

EndIP - ((Сеть и маска) | ~ Маска) ;

  • , то есть (72.20.10.0 & 0xFFFFFF00) | 0x000000FF

Это будет 72.20.10.0 - 72.20.10.255 .

7
ответ дан 1 December 2019 в 02:20
поделиться

Шаги будут выглядеть так для network / maskBits ,

. Вы вычисляете маску одним из этих двух способов,

mask = ~((1 << (32 - maskBits)) - 1) // or,
mask = ~(0xFFFFFFFF >> maskBits)

тогда диапазон равен

StartIP = network 
EndIP   = network | ~mask

Точнее

StartIP = network & mask
EndIP   = (network & mask) | ~mask

Где,

  • << - побитовый сдвиг влево (без переворота)
  • & - побитовое И,
  • | - это побитовое ИЛИ, а
  • ~ - побитовое ОБРАТЕНИЕ.
3
ответ дан 1 December 2019 в 02:20
поделиться

Я рекомендую использовать класс C # IPNetwork из Github .

string net = "192.168.168.100/24";
IPNetwork ipnetwork = IPNetwork.Parse(net);

Console.WriteLine("Network : {0}", ipnetwork.Network);
Console.WriteLine("Netmask : {0}", ipnetwork.Netmask);
Console.WriteLine("Broadcast : {0}", ipnetwork.Broadcast);
Console.WriteLine("FirstUsable : {0}", ipnetwork.FirstUsable);
Console.WriteLine("LastUsable : {0}", ipnetwork.LastUsable);
Console.WriteLine("Usable : {0}", ipnetwork.Usable);
Console.WriteLine("Cidr : {0}", ipnetwork.Cidr);

Он будет выводить

Network : 192.168.168.0
Netmask : 255.255.255.0
Broadcast : 192.168.168.255
FirstUsable : 192.168.168.1
LastUsable : 192.168.168.254
Usable : 254 
Cidr : 24

Удачи.

17
ответ дан 1 December 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: