【问题标题】:How to properly check if a DNS entry exists using c#如何使用 c# 正确检查 DNS 条目是否存在
【发布时间】:2018-04-12 13:53:40
【问题描述】:

我有一个按名称列出的计算机列表。我想看看网络上的计算机是否使用System.Net.PingSystem.Net.PingReply 连接。计算机列表可能不时变得陈旧。如果找不到主机,我会遇到异常。有没有办法可以在不出现异常的情况下检查是否有主机的记录?我想我也许可以使用Dns.GetHostEntry(c.Name),但如果主机不在 DNS 中,这也会返回异常。

【问题讨论】:

  • 为什么不将GetHostEntry 包装在try/catch 块中?
  • 我做了,但我认为可能有一种方法可以在不产生异常的情况下进行检查。
  • 除非您重新发明轮子,例如自己构建 UDP 请求,或者从您的代码中调用 nslookup,或者找到一个可以执行 DNS 请求的 Web 服务,否则这一切听起来都不必要地复杂。

标签: c# dns


【解决方案1】:

如果您无法使用 try/catch,您可以使用 SimpleDNS(也可以使用 Nuget),它只会在与所选 DNS 服务器的连接问题上引发异常。

var dnsServer = IPAddress.Parse("8.8.8.8");
var result = Query.Simple(new SimpleDnsPacket(new Question("lalalalalaldasl.com", QType.A), dnsServer)); //Failing Query

如果查询无效,则返回的 DNS 数据包对象将为空:

您可以查询标题中的Response 属性,而不是检查null

//Continued on from above....

if (result.Header.Parameters.Response != ResponseCode.Ok)
{
      //Something here!
}

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2011-05-14
    • 2018-04-22
    • 2012-08-05
    • 2013-11-07
    • 2011-11-24
    相关资源
    最近更新 更多