因此,我们在课堂上学习了 DNS 章节,我想知道是否有任何可能的方法可以通过命令行界面(即 Telnet 或 netcat)连接到端口 53 上的 DNS 服务器,就像我们在其特定端口上对 SMTP 或 HTTP 或 POP 所做的那样;我试过:
> telnet 8.8.8.8 53
但是连接一建立就关闭了;后来我意识到这是因为 telnet 使用 TCP 而 DNS 使用 UDP。
然后我尝试使用 netcat 执行同样的事情:
> nc -u 8.8.8.8 53
没什么!我只是想看看 DNS 的工作是否透明。(就像 http、SMTP 等一样)
答案1
正如你注意到的,DNS 主要使用 UDP,但实际上也通过 TCP 提供服务(通常用于大型响应和区域传输)。
这就是您在尝试时首先成功建立连接的原因telnet
。您的连接被关闭是因为您没有以预期的方式与服务交互,而不是因为telnet
使用 TCP。
重要的区别在于,与 HTTP 和 SMTP 不同,它们是纯文本协议,很容易直接使用,DNS 是一种二进制协议。
这意味着您将需要一些 DNS 客户端程序以合理的方式与名称服务器进行交互。
dig
长期以来一直是 DNS 故障排除的事实标准,因为它在构造查询和以简洁的方式漂亮地打印响应中的所有信息方面都非常出色。(BIND 代码库的一部分,包含在 ISC 的 Windows 版本中。)
drill
是另一种具有类似功能且输出格式基本相同的替代方案dig
。
nslookup
众所周知,它自古以来就存在。除了 Windows 之外,它基本上已被废弃,与前面提到的替代方案相比,它有一些不良的怪癖和有限的功能。调试选项 ( set debug
) 使其可用于紧急情况下的故障排除,因为它大大提高了输出的完整性,尽管调试输出的格式有很多不足之处。
答案2
您可以dig
像这样使用该实用程序:
dig @your.dns.server www.foo.bar
例子:
dig @8.8.8.8 www.google.com
如果你想查看一步一步的名称解析,你可以这样做:
dig +add +trace @8.8.8.8 www.google.com
此致!
答案3
对于 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'