繁体   English   中英

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

[英]How do I get my current DNS Server in C#?

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

有关示例代码,请参阅IPInterfaceProperties.DnsAddresses上的 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");
        }
    }
}

此方法确定所有“up”接口上配置的 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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM