Как узнать, когда сетевой интерфейс использует маршрутизатор в качестве DNS-сервера в C #? - PullRequest
0 голосов
/ 06 января 2019

Итак, мы все знаем команду cmd 'ipconfig / all'. Например, у нас есть сетевой интерфейс Wi-Fi. DHCP включен, а DNS-сервер является нашим собственным маршрутизатором. Как я могу узнать, использует ли сетевой интерфейс маршрутизатор в качестве DNS-сервера в C #? В коде я могу получить IP-адреса DNS-сервера и другую информацию, но возможно ли узнать, является ли маршрутизатор DNS-сервером?

класс по умолчанию NetworkInterface, вероятно, не скажут мне этого ... Но, может быть, есть какой-то алгоритм для определения этого?

1 Ответ

0 голосов
/ 08 января 2019

Класс NetworkInterface предоставляет много данных, таких как интерфейсный шлюз и IP-адрес сервера DNS. Просто нужно проверить gateway ip == dns ip. Для каждого интерфейса может быть несколько шлюзов и днс, поэтому вам нужно найти какое-то правило самостоятельно. Там моя наивная реализация, основанная на этом SO :

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);
        }
    }
}
...