【问题标题】:How to get DNS servers for the active network connection in UWP application?如何在 UWP 应用程序中获取活动网络连接的 DNS 服务器?
【发布时间】:2016-12-26 16:48:06
【问题描述】:

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

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

【问题讨论】:

  • 你看到你需要使用带有以下命令的 cmd.exe > IPCONFIG/ALL 了吗?如果是这样,你应该找到你需要的 www.pinvoke.net
  • 好吧,我知道我通常可以通过 WinAPI 调用获得我需要的东西,但我首先需要确保我不能使用 .NET 代码来执行此操作(就像我使用普通的 .NET Framework 所做的那样)。
  • 我不知道微软为什么决定取消 WinAPI 中可用的 Net 方法。我知道用于套接字连接的 WinAPI 中存在错误,并决定重写 Net 中的套接字模式。我不知道这是否适用于 DNS 功能。我也知道很多 WinAPI 被淘汰了,因为它们在托管库中不受支持。
  • 您可以使用我的库之一github.com/MichaCo/DnsClient.NET 运行 DNS 查询。实际上,我自己在 UWP 上遇到了这个问题,并决定使用本机 API 实现支持,直到 MS 实现它......似乎工作正常。查看最新的 beta nuget

标签: c# dns uwp


【解决方案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 服务器。

例如

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

应该可以正常工作。

【讨论】:

  • GetNetworkParams 在 UWP 应用中运行良好,谢谢。
  • 我发现 GetNetworkParams 仅适用于调试版本。在 Release 中,有“Unresolved P/Invoke method 'GetNetworkParams!iphlpapi.dll' 因为它在 UWP 应用程序中不可用。”警告,这会在尝试在上传到 Windows 应用商店时验证应用程序时导致错误。
  • @Alex mhm 感谢您的更新,这实际上是个坏消息 -.-
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
相关资源
最近更新 更多