如何在C#中获取当前DNS服务器?

如何在C#中获取当前DNS服务器?,c#,C#,如何在C#中获取当前的DNS服务器?请参阅上的MSDN以获取示例代码。我最近尝试做同样的事情,并发现了Robert Sindal的这一点 using System; using System.Net; using System.Net.NetworkInformation; namespace HowToGetLocalDnsServerAddressConsoleApp { class Program { static void Main(string[] a

如何在C#中获取当前的DNS服务器?

请参阅上的MSDN以获取示例代码。

我最近尝试做同样的事情,并发现了Robert Sindal的这一点

using System;
using System.Net;
using System.Net.NetworkInformation;

namespace HowToGetLocalDnsServerAddressConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(GetDnsAdress());
            Console.ReadKey();
        }

        private static IPAddress GetDnsAdress()
        {
            NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

            foreach (NetworkInterface networkInterface in networkInterfaces)
            {
                if (networkInterface.OperationalStatus == OperationalStatus.Up)
                {
                    IPInterfaceProperties ipProperties = networkInterface.GetIPProperties();
                    IPAddressCollection dnsAddresses = ipProperties.DnsAddresses;

                    foreach (IPAddress dnsAdress in dnsAddresses)
                    {
                        return dnsAdress;
                    }
                }
            }

            throw new InvalidOperationException("Unable to find DNS Address");
        }
    }
}

此方法确定所有“向上”接口上配置的dns服务器地址。它允许选择是否需要IPv4和/或IPv6地址

using System.Net.NetworkInformation;
using System.Net.Sockets;

public static IPAddress[] GetDnsAdresses(bool ip4Wanted, bool ip6Wanted)
{
    NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
    HashSet<IPAddress> dnsAddresses = new HashSet<IPAddress>();

    foreach (NetworkInterface networkInterface in interfaces)
    {
        if (networkInterface.OperationalStatus == OperationalStatus.Up)
        {
            IPInterfaceProperties ipProperties = networkInterface.GetIPProperties();

            foreach (IPAddress forAddress in ipProperties.DnsAddresses)
            {
                if ((ip4Wanted && forAddress.AddressFamily == AddressFamily.InterNetwork) || (ip6Wanted && forAddress.AddressFamily == AddressFamily.InterNetworkV6))
                {
                    dnsAddresses.Add(forAddress);
                }
            }
        }
    }

    return dnsAddresses.ToArray();
}
使用System.Net.NetworkInformation;
使用System.Net.Sockets;
公共静态IP地址[]GetDnsAddresses(需要bool IP4,需要bool IP6)
{
NetworkInterface[]interfaces=NetworkInterface.GetAllNetworkInterfaces();
HashSet dnsaddress=新HashSet();
foreach(网络接口网络接口接口中的网络接口)
{
if(networkInterface.OperationalStatus==OperationalStatus.Up)
{
IPInterfaceProperties ipProperties=networkInterface.GetIPProperties();
foreach(IPProperty.dnsAddresss中的IP地址的IP地址)
{
if((ip4Wanted&&forAddress.AddressFamily==AddressFamily.InterNetwork)| |(ip6Wanted&&forAddress.AddressFamily==AddressFamily.InterNetworkV6))
{
dnsaddress.Add(用于地址);
}
}
}
}
返回dnsaddress.ToArray();
}

您是指本地计算机的DNS服务器、您所在域的DNS服务器还是其他什么?对于什么是“您的DNS服务器”,我有很多不同的答案。我正在考虑将执行Mx记录查找的不安全代码转换为安全版本。请参阅:我想知道的是如何执行DNS查找而不必指定DNS服务器名称,即让系统使用默认名称。这是您在任何地方键入URL时都会发生的情况,因此不确定DNS类为什么不能允许默认值。对于我自己,因为我实际上是通过powershell(在没有ipconfig等的地方)执行此操作的:
[System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces()|?{$\.OperationalStatus-eq[System.Net.NetworkInformation.OperationalStatus]::Up}}|%{$\.GetIPProperties().dnsaddress.IPAddress