如何在C#中获取当前DNS服务器?
如何在C#中获取当前的DNS服务器?请参阅上的MSDN以获取示例代码。我最近尝试做同样的事情,并发现了Robert Sindal的这一点如何在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
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