DNS可以帮助我们把域名映射到一个IP地址上,或者查询一个IP地址下有那些域名,使用域名访问一个网站或者服务器是一件很平常的事情,很少有人关心域名变成IP地址的实际过程,本文将使用C语言实现一个基本的DNS解析器,通过与DNS服务器的通信完成将一个域名转换成IP地址的过程,本文将提供完整的源程序;阅读本文需要有一定的网络编程基础,熟悉基本的socket编程并对DNS有一些了解,本文对网络编程的初学者难度较大。
1. 目标
- 本文要实现一个DNS的客户端解析器(DNS resolver),意即通过直接与DNS服务器通讯,将一个域名转换成其所对应的IP地址;
- 对DNS客户端解析器的要求:
- 命令行接受用户输入的域名
- 向DNS服务器发出查询请求,并将查询结果显示在屏幕上
- 仅查询域名的A记录(QTYPE=HOST,QCLASS=IN),后面会讨论相关细节
- 如果查询结果有多条记录,要求显示所有查询结果
- 如果查询的域名为别名(Alias),要求显示其实际域名(Canonical Name)
- 仅查询IPv4地址。
- 在C语言编程中,当需要将一个域名转换成IP地址时,通常是使用getaddrbyname()或