如何在UWP应用程序中获取活动网络连接的DNS服务器?

时间:2016-12-26 16:48:06

标签: c# dns uwp

我需要执行不同类型的DNS查询(例如DNS MX查找)。为此,我需要自动检测哪些DNS服务器与活动网络连接相关联。我在Windows应用程序和.NET Framework中使用的所有方法都不能用于UWP,原因各不相同(没有必需的类或NotImplementedException):WMI,Registry,System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces。

我检查了Windows.Networking.Connectivity命名空间但找不到我需要的内容。

1 个答案:

答案 0 :(得分:1)

NetworkInterface.GetAllNetworkInterfaces遗憾的是还没有在UWP上工作,尽管我并不确定为什么这是因为本机API可用。也许我错过了什么。

无论如何,昨天我遇到了同样的问题,最终使用了IpHlpApi中的GetNetworkParams。 至少在Netstandard2.0可能最终以托管方式支持这些API之前......

GetNetworkParams通过一个非常简单的调用为您提供主机名和所有当前配置的DNS服务器地址。

您还可以使用GetAdaptersAddresses,它提供了更多信息以及所有这些信息(用于填充NetworkInterface托管内容)。但是,嘿,我们只需要DNS服务器吗?

从GetNetworkParams获得FIXED_INFO结构,其中包含(PIP_ADDR_STRING CurrentDnsServer)dns服务器列表。

如果您不想自己实现所有这些,可以使用我的DnsClient.NET library。如果您没有手动指定IpEndpoint,它会使用上面提到的内容初始化系统的DNS服务器。

e.g。

var lookup = new LookupClient();
var result = await lookup.QueryAsync("example.com", QueryType.MX);

应该可以正常工作。