我正在做一个家庭作业,基本上要求我们解析 DNS 响应以获取 IP 地址等。问题是教授已经非常详细地告诉我们来自 DNS 服务器的响应是什么样的,但我不知道要向服务器发送什么。我的第一次尝试是netcat <ip address of local name server> 53
输入 www.google.com 并按回车键并寻找回复,但我没有得到任何回复。
谁能向我描述一下 DNS 查询是什么样的(比如查询的每个部分允许多少字节)?
这应该包含在RFC 1034的 3.7 节中,但我只是略读了一下,更不用说实际阅读了。
DNS 查询的基本形式是一个简短的标头,它基本上都是固定的字节值,然后是你得到的名称,在它前面加上一个点 ( .
),然后用范围 1 中的一个字节替换每个点-63 表示名称的下一个段的长度,直到下一个点,然后是一些更多的固定值字节。只要您所做的只是基本的地址查找,而不是像区域传输这样花哨的东西,这就是您需要了解的有关 DNS 协议的全部内容。
有关标头等字段的详细信息,请阅读 RFC 1035。或者只是从数据包嗅探器转储中复制它们。您唯一需要更改的是查询 ID(它应该是适当随机的,以避免对您的程序进行简单的欺骗攻击),并且可能是 RR 类型(例如,如果您需要查询 IPv6 (AAAA) 或反向 DNS ( PTR) 记录除了 A.
这不会直接回答您的问题,但请尝试为命令行运行 nslookup 并查看可用的选项。您可以指示它查询特定项目,例如 MX 记录等。
但是,如果您对协议本身的外观更感兴趣?此 RFC 提供的信息比您想要的多得多:https ://www.rfc-editor.org/rfc/rfc1035