通过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

实验数据如下:
响应报文格式如下:
这里写图片描述
具体说明请看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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值