如何测试DNS连接?

时间:2009-12-26 08:12:41

标签: c# .net networking dns

一个简单的问题。如何测试当前的DNS是否正常工作?它会涉及投票吗?我担心这会占用资源,还需要在一个单独的线程上执行。

4 个答案:

答案 0 :(得分:1)

是的,它会涉及查找内容,解析主机名或其他DNS功能。此外,您还需要确保您尝试解析的主机尚未缓存在本地DNS缓存中。

Dns.GetHostByName函数执行查找,但没有提到它是否将使用本地缓存。可能它确实如此,因为它可能会使用操作系统查找功能。

答案 1 :(得分:1)

如果您尝试在C#代码中执行此操作,请查看

namespace System.Net

文档在此处找到:http://msdn.microsoft.com/en-us/library/system.net.aspx

......其中包括班级......

public static class Dns

文档在此处找到:http://msdn.microsoft.com/en-us/library/system.net.dns.aspx

这将允许您编写如下代码:

IPHostEntry hostInfo = Dns.GetHostByName("www.contoso.com");

根据您要完成的任务,Dns类中还有其他功能可供您使用。

这并没有提供直接检查“DNS是否已关闭”的方法,但如果您无法解析一直应该启动的网站(例如www.microsoft.com或www.google.com )那么你的dns已经关闭或者你已经失去了与互联网的连接。如果这不是您想要的,请更详细地评论,我们会看看我们是否可以提供帮助。

答案 2 :(得分:0)

尝试使用dns解析域名。

答案 3 :(得分:0)

有几件事:

投票1:

由于可能会返回缓存值,您可能希望查找不存在的随机域(可能是guid.somedomainyoucontrol.com)并检查是否收到超时或预期的NXDOMAIN结果。

投票2:

您担心这可能需要花费大量资源:您必须在此解释您想要做什么才能获得真正的答案,但是:DNS是一种非常轻量级的协议。我不认为它会对您的客户端或服务器产生巨大影响,具体取决于轮询间隔。哎呀,甚至还有“TCP over DNS”隧道,真的强调DNS可以做什么,他们通常不会破坏其他人或DOS服务器的网络。 可能最好的办法是解决保守的轮询超时并解析您拥有的某个域下的子域,甚至可能直接查询您控制的域名服务器。

“连接”:

DNS大部分时间都使用UDP。它可以切换到或通过TCP使用,但这不是“正常”使用。因此,“连接”一词可能具有误导性。如果您现在可以解析主机 ,则可以测试任何时间点。