Получить маску подсети и основной шлюз - C#
Формулировка задачи:
Мне нужно получить IPV4 адрес, маску подсети и основной шлюз, проверить прописаны ли они статически, если нет то прописать. Как это сделать?
Решение задачи: «Получить маску подсети и основной шлюз»
textual
Листинг программы
static void Main(string[] args)
{
Console.WriteLine($"IPv4 addresses: {Environment.NewLine}");
foreach (var ip in Dns.GetHostAddresses(Dns.GetHostName()).Where(ha => ha.AddressFamily == AddressFamily.InterNetwork))
{
Console.WriteLine($"IP: {ip}");
Console.WriteLine($"Subnet mask: {GetSubnetMask(ip)}");
var targetInterface = NetworkInterface.GetAllNetworkInterfaces().SingleOrDefault(ni => ni.GetIPProperties().UnicastAddresses.OfType<UnicastIPAddressInformation>().Any(x => x.Address.Equals(ip)));
if (targetInterface == null)
continue;
var gates = targetInterface.GetIPProperties().GatewayAddresses;
if (gates.Count == 0)
{
Console.WriteLine("Gates: NO GATES");
Console.WriteLine(Environment.NewLine);
continue;
}
Console.WriteLine("Gates:");
foreach (var gateAddress in gates)
{
Console.WriteLine($"{gateAddress.Address:10}");
}
Console.WriteLine(Environment.NewLine);
}
Console.ReadKey(true);
}
public static IPAddress GetSubnetMask(IPAddress address)
{
foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
{
foreach (UnicastIPAddressInformation unicastIPAddressInformation in adapter.GetIPProperties().UnicastAddresses)
{
if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork)
{
if (address.Equals(unicastIPAddressInformation.Address))
{
return unicastIPAddressInformation.IPv4Mask;
}
}
}
}
throw new ArgumentException($"Can't find subnetmask for IP address '{address}'");
}