通过UDP解析域名 DNS解析

只要向网关或都域名服务器的53端口发送一个DNS查询报文,就可以收到服务器响应的报文,解析这个报文就可以得到域名对应的IP地址。(使用的是UDP的53端口,UDP配置为192.168.1.1远程端口53本地端口1000)

DNS查询包的编码:(以www.baidu.com为例)

3E 3A //为标识字段
01 00 //为标志字段,该字段设置了TC表示该报文是可截断的
00 01 //查询报文数量为1
00 00 00 00 00 00 //表示回答,授权和额外信息都为0
03 77 77 77 05 62 61 69 64 75 03 63 6F 6D 00 //表示查询的名字为www.baidu.com
00 01 //为类型,1表示A查询
00 01 //为类型,1表示Internet数据

DNS响应包:(以www.baidu.com为例)

3E 3A //为标识字段
81 80 //为标志字段,其中设置了QR = 1,RD = 1,RA = 1
00 01 //问题数1
00 03 //回答数3
00 00 00 00
03 77 77 77 05 62 61 69 64 75 03 63 6F 6D 00 //表示查询的名字为www.baidu.com
00 01 //为类型,1表示A查询
00 01 //为类型,1表示Internet数据
C0 0C //为域名指针
00 05 //表示CNAME(规范名称)
00 01 //为类型,1表示Internet数据
00 00 03 4B //生存时间
00 0F //数据长度
03 77 77 77 01 61 06 73 68 69 66 65 6E C0 16
C0 2B 00 01 00 01 00 00 00 63
00 04 //IP v4
79 0E 59 0A //IP1
C0 2B 00 01 00 01 00 00 00 63
00 04 //IP v4
79 0E 58 4C //IP2

简单点的话就是回复包的最后四字节就是域名的对应的个IP,稍微有点注意的是查询包里的域名的编码。
域名的编码格式:以’.’把域名分成多个标示符序列,每个序列的首字节说明该标示符的长度,最后以0结束。
www.baidu.com 对应 03 77 77 77 05 62 61 69 64 75 03 63 6F 6D 00
www 03 77 77 77
baidu 05 62 61 69 64 75
com 03 63 6F 6D

实验数据如下:
响应报文格式如下:
通过UDP解析域名 DNS解析_第1张图片
具体说明请看https://jocent.me/2017/06/18/dns-protocol-principle.html#_label2_1
3E 3A //回话标志
81 80 //为标志字段,其中设置了QR = 1,RD = 1,RA = 1
00 01 //1个问题
00 03 //三个资源
00 00 00 00 //无授权资源,无附加资源
03 77 77 77 05 62 61 69 64 75 03 63 6F 6D 00 // 03 WWW 05 baidu 03 com 0
00 01 //为类型,1表示A查询
00 01 //为类型,1表示Internet数据

C0 0C //为域名指针C0固定 0C开始处地址 从C0开始从0计数(也就是从C0数到03)
00 05 //表示CNAME(规范名称)
00 01 //为类型,1表示Internet数据
00 00 02 22 //生存时间
00 12 //数据长度
03 77 77 77 01 61 06 73 68 69 66 65 6E 03 63 6F 6D 00 //03 WWW 01 a 06 shifen 03 com

C0 2B //C0固定 2B从最上面的C0开始计数到IPV4的开始处(也就是从第一个C0 数到0E)
00 01 //查询类型1表示IPv4地址
00 01 //为类型,1表示Internet数据
00 00 02 22 //生存时间
00 04 //四个字节
0E D7 B1 27 //(14 215 177 39)IPV4的IP地址

C0 2B //C0固定 2B从最上面的C0开始计数到IPV4的开始处(略过同段)
00 01 00 01 00 00 02 22 //同上
00 04 //四个字节
0E D7 B1 26 //(14 215 177 38)IPV4的IP地址

参考:http://blog.sina.com.cn/s/blog_58b5cfcc0100kh9t.html

你可能感兴趣的:(系统知识,网络通讯)