Я искал SO для получения справки, но не смог найти ответ на мой вопрос.Преобразование маски подсети «/» нотация в стандарт Cisco 0.0.0.0
Ситуация: Мне нужно преобразовать нотацию маски подсети «/ NN» (думаю, IPTABLES) в нотацию 0.0.0.0 cisco.
NN - это число «1» в подмаске, от нижнего октета до более высокого. Каждый октет представляет собой 8-битные целые числа.
Возможное решение:
Сделать массив 32 «0» и заполняя последние цифры NN с «1», то в группе 4 октетов и преобразование в целое ... а/23 маска должна быть как 0.0 .1.255.
Мой вопрос - как это сделать в .NET ... я никогда не использовал двоичные манипуляции и преобразования.
Можете ли вы, ребята, помочь мне с этим решением?
ОБНОВЛЕНИЕ - Стивен правильно ответил!
Вот код портирован на .NET
if (p.LastIndexOf("/") < 0) return p;
int mask= Convert.ToInt32("0"+p.Substring(p.LastIndexOf("/")+1,2));
int zeroBits = 32 - mask; // the number of zero bits
uint result = uint.MaxValue; // all ones
// Shift "cidr" and subtract one to create "cidr" one bits;
// then move them left the number of zero bits.
result &= (uint)((((ulong)0x1 << mascara) - 1) << zeroBits);
result = ~result;
// Note that the result is in host order, so we'd have to convert
// like this before passing to an IPAddress constructor
result = (uint)IPAddress.HostToNetworkOrder((int)result);
string convertedMask = new IPAddress(result).ToString();
Благодарим за вопрос: D Я попробую и отправлю отзыв, но перед этим у меня возник вопрос. Результатом будет «255.255» или «0.0.1.255», как cisco? С уважением! – jaderanderson
Это преобразование в стандартную маску подсети «255.255.128.0». Если вам нужна «подстановочная» маска, вы можете взять побитовое ('~') результата перед вызовом 'HostToNetworkOrder', и это даст вам результат вроде« 0.0.1.255 ». –
Спасибо, человек, обновит код с ответом! Оно работает! – jaderanderson