1. 目标
- 本文要实现一个DNS的客户端解析器(DNS resolver),意即通过直接与DNS服务器通讯,将一个域名转换成其所对应的IP地址;
- 对DNS客户端解析器的要求:
- 命令行接受用户输入的域名
- 向DNS服务器发出查询请求,并将查询结果显示在屏幕上
- 仅查询域名的A记录(QTYPE=HOST,QCLASS=IN),后面会讨论相关细节
- 如果查询结果有多条记录,要求显示所有查询结果
- 如果查询的域名为别名(Alias),要求显示其实际域名(Canonical Name)
- 仅查询IPv4地址。
- 在C语言编程中,当需要将一个域名转换成IP地址时,通常是使用getaddrbyname()或者getaddrinfo()函数,这两个函数会使用系统设定的DNS服务器,本文实现的DNS客户端将使用自己定义的DNS服务器;
- 一个DNS的客户端无非就是按照一定的格式向DNS服务器发送一个报文,然后接收来自DNS服务器的响应,并解析收到的信息,从而获得结果。