如何知道网络接口何时在 c# 中使用路由器作为 DNS 服务器



所以我们都知道cmd命令'ipconfig/all'。例如,我们有Wi-Fi网络接口。DHCP已启用,DNS服务器是我们自己的路由器。我如何知道网络接口是否在 C# 中使用路由器作为 DNS 服务器?在代码中,我可以获取DNS服务器IP和所有其他信息,但是是否可以知道路由器是否为DNS服务器?

默认类NetworkInterface可能不会告诉我...但也许有某种算法可以确定这一点?

NetworkInterface类公开大量数据,如接口网关和 DNS 服务器 IP。只需要检查gateway ip == dns ip. 每个接口可以有多个网关和 DNS,因此您需要自己找到一些规则。在那里,我基于此的天真实现 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);
        }
    }
}

最新更新