【问题标题】:C# How to query Windows DNS Server for a rrecord without using WMIC# 如何在不使用 WMI 的情况下查询 Windows DNS 服务器的 rrecord
【发布时间】:2015-03-23 22:49:00
【问题描述】:

有没有一种方法可以在不使用 WMI 的情况下搜索 Dns 服务器以获取记录,从而使用 .NET 4,5 连接到 Dns 服务器?

我在 .NET 4.5 中完全可以使用 Wmi,但发现它太慢了(即使在缓存连接时也是如此)。太不协调了。有些搜索查询需要 2 秒,而有些则超过 100 秒。

据我所知,我无法进一步优化查询。

Query:  string query = "SELECT * FROM " + propertiesStruct.Table + " WHERE ContainerName = '" + domain + "' AND OwnerName ='" + name + "." + domain + "'";

所以我正在寻找一种连接到 dns 服务器的方法,按名称和域查询它以获取 dns 记录,并尽可能返回与 WMI 查询相同/相似的数据。

我查看了 .NET 4.5 System.Net.Dns 类和方法,但发现它没有提供足够的信息。 (https://msdn.microsoft.com/en-us/library/ms143998%28v=vs.110%29.aspx)

我要返回的信息是:示例 -

DNS 记录 fqdn - stackoverflow.com

DNS 记录名称 - stackoverflow

DNS 域/区域 - com

DNS 记录值 - 198.252.206.140

DNS 记录类型 - A/AAAA/CNAME/PTR

DNS 记录 ttl - 3600

即使它返回具有相同 fqdn 但值不同的所有记录,因为它是不同的记录类型,这很好,我可以手动过滤结果以查找我正在寻找的类型。

我找到的最接近的东西是 Linux dig,但这必须在 Windows 服务器上的 .net 中完成。

谢谢

【问题讨论】:

    标签: c# .net dns


    【解决方案1】:

    如果您可以使用 p/invoke,那么就有了 DNSAPI 库/DLL。见DNSAPI on pinvoke.net。一些选项表明 DnsQuery 方法可以使用 dns-cache,并且可以关闭缓存的使用。我已经成功地使用了这个 API,但我们警告说,它的级别很低。例如,如果您想进行反向查找,您可能必须显式组合查询(即,对于 192.168.0.1,使用 PTR 类型的查询“1.0.168.192.in-addr.arpa”)。

    【讨论】:

      猜你喜欢
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      相关资源
      最近更新 更多