2009-12-26 55 views
1

一个简单的问题。如何测试当前的DNS是否正在运行或关闭?它会涉及投票吗?我担心会占用资源,并且需要在单独的线程上执行。如何测试我的DNS连接?

+0

dig,traceroute和/或nslookup甚至可能是netstat都是不错的工具。更多信息insecure.org网络扫描 – 2009-12-26 09:02:24

回答

1

是的,它会涉及查找东西,解析主机名或其他DNS功能。另外,您需要确保您尝试解析的主机没有被缓存在本地DNS缓存中。

Dns.GetHostByName函数执行查找,但没有提及它是否会使用本地缓存。这很可能是因为它可能使用操作系统查找功能。

+0

是的,我相信它也缓存查找。我可以绕过缓存的任何方式? – Prasannah 2009-12-26 08:33:56

+2

尝试其他主机名称。你可以使用一个不存在的查找 - 查找不会被缓存,你只是每次都找不到。 – blowdart 2009-12-26 08:57:16

0

尝试使用dns解析域名。

0

几件事情:

轮询1:

因为可能获得你可能想查找不存在的随机域回bached值(guid.somedomainyoucontrol.com也许),并检查是否获得超时或预期的NXDOMAIN结果。

投票2:

关于你的恐惧,这可能会花费大量的资源:你真的要解释你想在这里做一个真正的答案是什么,但:DNS是一个非常轻量级的协议。我认为这不会影响您的客户端或服务器,具体取决于轮询时间间隔。哎,甚至有“TCP over DNS”隧道,确实强调DNS可以做的事情,它们通常不会破坏网络或者DOS服务器。 也许最好的办法是解决保守的轮询超时问题,并解决某个域下的子域名问题,甚至可能直接查询您控制的域名服务器。

“连接”:

DNS在大多数情况下使用UDP。它可以切换到或通过TCP使用,但这不是“正常”的用法。所以术语“连接”可能是误导性的。如果您现在可以解决主机,那么您只需测试任意时间点。

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已经关闭,或者你失去了与互联网的连接。如果这不是你想要的,请评论一下更多的细节,我们会看看我们能否提供帮助。

+0

对不起blowdart,我回答时不知何故错过了你的评论。 还有2个用于tracerouting的开源项目... http://stackoverflow.com/questions/142614/traceroute-and-ping-in-c – 2009-12-26 17:22:20

+3

GetHostByName已过时,请使用GetHostEntry。 – Trillian 2009-12-26 17:46:09

+0

阿Trillian是正确的,错过了过时的旗帜:( – 2009-12-27 20:49:56