1. DNS简介
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便的访问到网站的一种服务。简单说,就是将形如“www.baidu.com”的域名解析为形如“14.215.177.38”的IP地址。
2. DNS报文格式
2.1 请求报文
其中报文头的格式如下:
ID:16位的消息ID,标示一次正常的交互,该ID由消息请求者设置,消息响应者回复请求时带上该ID。
flag:16位的标志位,格式如下:
OR:标识是请求消息还是应答消息。该位为0则为请求,该位为1为应答。
opcode:请求类型,目前有三类值:
0 标准查询(QUERY)
1 反向查询(IQUERY)
2 DNS服务器状态请求(STATUS)
AA:只在响应消息中有效。该位标示响应该消息的域名服务器是该域中的权威域名服务器。因为Answer Section中可能会有很多域名
TC:标示这条消息是否因为长度超过UDP数据包的标准长度512字节,如果超过512字节,该位被设置为1
RD:是否递归查询。如果该位被设置为1,则收到请求的域名服务器会递归查询域名,需要注意的是,该位为1,域名服务器不一定会做递归查询,这取决于域名服务器是否支持递归查询
RA:在响应消息中清除并设置。标示该DNS域名服务器是否支持递归查询
RCODE:只在响应消息中有效,标示响应消息的类型:
0 成功的响应
1 格式错误–域名服务器无法解析请求,因为请求消息格式错误
2 服务器错误–域名服务器因为内部错误无法解析该请求
3 名字错误–只在权威域名服务器的响应消息中有效,标示请求中请求的域不存在
4 Not Implemented–域名服务器不支持请求的类型
5 Refused–域名服务器因为策略的原因拒绝执行请求的操作。例如域名服务器不会为特定的请求者返回查询结果,或者域名服务器不会为特定的请求返回特定的数据
QDCOUNT:标示请求部分的条目数
ANCOUNT:标示响应部分的资源记录数。如果响应消息中没有记录,则设置为0
NSCOUNT:标示权威部分的域名服务器资源记录数。如果响应消息中没有权威记录,则设置为0
ARCOUNT:标示额外部分的资源记录数
请求正文格式如下:
NAME:需要查询的域名
TYPE:请求类型,常用值如下:
1 由域名获得IPv4地址
2 查询域名服务器
5 查询规范名称
12 将IP地址转成域名
28 由域名获得IPv6地址
CLASS:通常置为1,标识internet数据
抓包结果:
2.2应答报文
头部格式和请求报文一样,查询到结果,会设置ANCOUNT的值,再在报文最后加上资源信息。格式如下:
NAME:资源记录包含的域名
TYPE :2个字节表示资源记录的类型,指出RDATA数据的含义
CLASS: 2个字节表示RDATA的类
TTL: 4字节无符号整数表示资源记录可以缓存的时间。0代表只能被传输,但是不能被缓存URDLENGTH :2个字节无符号整数表示RDATA的长度
RDATA :不定长字符串来表示记录,格式和TYPE和CLASS有关。比如,TYPE是A,CLASS 是 IN,那么RDATA就是一个4个字节的ARPA网络地址
抓包结果: