using System.Collections.Generic;
public static void Main()
string[] ipAddresses = {"50.212.80.65/29",};
var result = ValidateAndCorrectIpAddresses(ipAddresses);
private static List<string> ValidateAndCorrectIpAddresses(string[] ipAddressesList)
List<string> result = new();
foreach(string iPAddress in ipAddressesList)
Console.Write("original ip address: " + iPAddress);
var correctedIPAddress = CorrectCidrFormat(iPAddress);
result.Add(correctedIPAddress);
Console.Write("corrected ip address: " + correctedIPAddress);
private static string CorrectCidrFormat(string cidrInput)
Console.Write("cidrInput: " + cidrInput);
var cidrParts= cidrInput.Split('/');
if(cidrParts.Length == 2)
var ipAddress = IPAddress.Parse(cidrParts[0]);
Console.Write("ipAddres: " + ipAddress);
var subnetMask = int.Parse(cidrParts[1]);
Console.Write("subnetMask: " + subnetMask);
var networkAddress = GetNetworkAddress(ipAddress, subnetMask);
Console.Write("networkAddress: " + networkAddress);
return $"{networkAddress}/{subnetMask}";
static IPAddress GetNetworkAddress(IPAddress ipAddress, int prefixLength)
byte[] ipBytes = ipAddress.GetAddressBytes();
byte[] mask = GetSubnetMask(prefixLength);
for (int i = 0; i < ipBytes.Length; i++)
return new IPAddress(ipBytes);
static byte[] GetSubnetMask(int prefixLength)
int fullBytes = prefixLength / 8;
int remainingBits = prefixLength % 8;
byte[] mask = new byte[4];
for (int i = 0; i < fullBytes; i++)
mask[fullBytes] = (byte)(255 << (8 - remainingBits));