Итак, мы все знаем команду cmd "ipconfig/all". Например, у нас есть сетевой интерфейс Wi-Fi. DHCP включен, а DNS-сервер является нашим собственным маршрутизатором. Как я могу узнать, использует ли сетевой интерфейс маршрутизатор в качестве DNS-сервера в С#? В коде я могу получить IP-адреса DNS-сервера и другую информацию, но возможно ли узнать, является ли маршрутизатор DNS-сервером?
Класс по умолчанию NetworkInterface
вероятно, не скажет мне этого... Но, может быть, есть какой-то алгоритм для определения этого?
Класс NetworkInterface
предоставляет много данных, таких как интерфейсный шлюз и IP-адрес сервера DNS. Просто нужно проверить gateway ip == dns ip
. Для каждого интерфейса может быть несколько шлюзов и днс, поэтому вам нужно найти какое-то правило самостоятельно. Там моя наивная реализация, основанная на этом qaru.site/questions/513370/...:
NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface networkInterface in networkInterfaces)
{
if (networkInterface.OperationalStatus == OperationalStatus.Up && networkInterface.NetworkInterfaceType != NetworkInterfaceType.Loopback)
{
IPInterfaceProperties ipProperties = networkInterface.GetIPProperties();
var gateways = ipProperties.GatewayAddresses.Select(ga => ga.Address);
var dns = ipProperties.DnsAddresses;
if (dns.Any(d => gateways.Contains(d))){
Console.Write("dns router found on interface " + networkInterface.Name);
}
}
}