所以,我们在我们class的DNS章节,我想知道是否有任何可能的方式,但我可以通过命令行接口(即Telnet或netcat)在端口53上连接到DNS服务器,就像我们为SMTP或HTTP或POP在其特定的端口上; 我试过了:
> telnet 8.8.8.8 53
但是这个连接一旦build立就closures了。 我后来意识到是因为telnet使用TCP而DNS使用UDP。
然后我试着用netcat做同样的事情:
> nc -u 8.8.8.8 53
纳达! 我只是想看到一些透明的DNS的工作(如与http,SMTP等)
正如你所看到的, DNS主要使用UDP,但服务实际上也是通过TCP提供的 (通常用于大量响应和区域传输)。
这就是为什么当你尝试telnet时候,你首先build立了一个连接。 您的连接已closures,因为您没有以预期的方式与服务进行交互,而不是因为telnet使用TCP。
重要的区别在于,与纯文本协议的HTTP和SMTP不同,并且直接易于使用, DNS是二进制协议 。
这意味着您将需要一些DNS客户端程序以任何合理的方式与名称服务器进行交互。
dig在很长一段时间内一直是DNS故障排除的事实标准,因为在构build查询和以简洁的方式漂亮地打印响应中的所有信息方面, dig是非常好的。 (BIND代码库的一部分,并包含在ISC的Windows版本中。)
drill是另一种具有类似能力和与dig相同输出格式的替代scheme。
nslookup因其早在几时之前就已经广为人知。 除了Windows之外,它已经被大量放弃,与前面提到的替代方法相比,它有一些不良的怪癖和有限的能力。 debugging选项( set debug )使其可用于排查故障,因为它极大地提高了输出的完整性,尽pipedebugging输出的格式化还有很多不足之处。
您可以使用dig工具,如下所示:
dig @your.dns.server www.foo.bar
例:
dig @8.8.8.8 www.google.com
如果你想看到分步的名字parsing,你可以这样做:
dig +add +trace @8.8.8.8 www.google.com
最好的祝福!
对于Windows,您可以使用NSlookup
nslookup [-opt ...] # interactive mode using default server nslookup [-opt ...] - server # interactive mode using 'server' nslookup [-opt ...] host # just look up 'host' using default server nslookup [-opt ...] host server # just look up 'host' using 'server'