DNS协议格式解析及说明。

DNS即域名系统(Domain Name System),是用来将域名与IP地址建立映射的协议,通过DNS协议,可以方便记忆。

DNS可基于TCP或UDP,使用53号端口,常见的是使用UDP承载,通常由其他应用层协议(如HTTP、SMTP等)使用,用来将主机名解析为IP地址,应用相当广泛。

所以,在协议还原的系统中,基本上所有的移动APP的分析都需要先分析DNS。

DNS包含一系列RFC标准,如RFC1034等。

本文对域名及解析过程、DNS报文格式进行说明,并通过Wireshark工具对DNS协议进行抓包分析展示,了解DNS协议报文的格式和解析方法,本文仅限于UDP承载的DNS,基于IPV4。

01

域名及解析过程

域名由一系列字母(a~z,不区分大小写)、数字(0~9)和连接符(-)组成以及点号分隔符组成,总长度不大于255,分隔符隔出的每段相当于一个层次的域名,级别低的在左,级别高的在右,每段长度不大于63。如域名dailyupdate.wangwang.taobao.com,三段域名分别为dailyupdate、wangwang、taobao、com,其中com的级别最高。

相应地,在DNS报文中,一个完整的域名是分成多段的,但没有使用点号分隔起来,而是使用长度域名的顺序,依次出现在数据中。

在报文中,一个域名的格式一般如下图所示:

如dailyupdate.wangwang.taobao.com这个域名,由4段组成,则报文中的格式为4个长度数据块,最后以0x00结束。

另外,在报文中,为节约资源,每段域名如果在之前有重复,会被缩写为两个字节,其中前两个比特位为11,之后14个比特位表示重复内容距离DNS协议报文头的距离,而重复的长度则为到0x00结束,这个特性很多人都没有注意到,导致很多的DNS解析错误或不被解析。

在一个捕包点的报文层面,一个域名到IP的解析总体可分为两步:

1、目标机向指定的域名服务器发出一个DNS请求报文,报文里携带需要查询的域名;

2、域名服务器向目标机回应一个DNS响应报文,里面包含域名对应的IP地址。

从最后一节对dailyupdate.wangwang.taobao.com进行域名解析的报文中可明显看出这两步。当然,实际上一次DNS的查询经历了多个迭代查询的小步,每级域名服务器向上级域名服务器请求,最终得到结果向下级返回,这个过程在一个捕包点的报文解析中是无法体现的,协议分析过程中也不需要特地关心。

02

DNS协议报文格式

一次DNS过程包含一对请求报文和响应报文。请求和响应报文有统一的报文格式如下图:

一个DNS报文分成头部和正文两个部分。

头部的内容共14字节,包括三大类信息:

1、会话标识(2字节):是DNS报文的ID标识,用来确定请求报文和应答响应报文的配对关系,一对请求和应答报文的会话标识字段是相同的,四元组和会话标识一起,可以将DNS应答报文和请求报文一一对应。

2、标志(2字节):每位表示不同的标志含义,按位表示字段如下:

QR:查询/响应标志,1比特,0为查询,1为响应。

opcode:查询响应类型,4比特,0表示标准查询,1表示反向查询,2表示服务器状态请求。

AA:授权回答,1比特,表示该服务器是否为授权的有效服务器,在响应报文中有效,请求中无效。

TC:截断标志,1比特,1表示超过512字节并已被截断,0表示没有发生截断。

RD:期望递归回答标志,1比特,1表示期望。

RA:可用递归标志,1比特,响应报文中有效,1表示得到递归响应。

zero:全0保留字段,3比特,新版RFC中对后两位进行了使用,本文忽略。

rcode:返回码,4比特,0表示没有差错,1表示格式错误,32表示服务器错误,3表示域参照问题,4表示查询类型不支持,5表示被禁止,其它被保留。

3、数量字段(总共8字节):Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四个区域Queries、Answers、Authorities、Additional records的数目。

在头部之后,为正文的四大区域,分成两类:

1、Queries区域,包括数量不等的查询块,每块格式如下:

Name:查询名,长度不定,且不用填充字节,一般该字段表示要查询的域名(反向查询则为IP),格式见yum

域名的每一段之前都有一字节的长度,整个域名结束为0x00。

Type:查询类型,两字节,如A,NS,CNAME,PTR等。

Class:查询类,两字节,通常为IN(0x0001),表示internet数据。

2、资源记录(RR)区域,即Answers、Authorities、Additional records三个区域,每个区域均包括数量不等的查询块,每块格式如下:

Name:域名,相当于Queries区域的查询名字段,二者本质上是相同的,但由于资源记录区域在Queries区域之后,因此如果域名有重复的段,则该字段内的一段或若干段会使用2个字节的数值来代替,而不是原始的长度和字符串。

例如:

这个报文中的Answers区域,有Name字段与Queries区域的查询域名完全一致,因此,为两字节C00C(1100000000001100),最前面的两个高位是 11,之后的14个字节数值对应为12,刚好指向Queries区域的查询域名字段。

另外还有部分段重复的情况,可以自行分析,此处不做描述。

Type:查询类型,两字节,与Queries区域的查询类型含义相同。

Class:查询类,两字节,通常为IN(0x0001),表示internet数据。

TTL:生存时间,四字节,单位为秒,资源记录的生存周期,越大表明该资源记录越稳定。

Data Length:资源数据长度,两字节,表示后面的资源数据的长度。

Data:资源数据,长度由Data Length值确定。为按Queries区域的要求返回的相关资源记录的数据。可以是地址或者另一个域名等。

另外Authorities区域即为Wireshark中显示的Authoritative nameservers区域。

03

DNS报文例子

一次DNS请求的过程:

包括请求和响应,二者具备相同的ID。

请求:

DNS请求中含有一个被请求的域名:dailyupdate.wangwang.taobao.com。

响应:

使用Wireshark得到的分析如下:

基本所有的数据段都存在。

在这里,就包含了域名部分重复的例子:

图中红框所示即为使用0xC028代替之前出现的com段,但是dailyupdate.wangwang.taobao.com由于在该CNAME的前一部分,则没有被代替。

对DNS协议的分析就到这里了,DNS流量很常见,大家可以实地抓包分析试试,在Wireshark中全流量抓包后,使用过滤规则“dns”即可将所有DNS报文过滤出来。如果有需要,可以加我共同学习。

长按进行关注。

使用Wireshark进行DNS协议解析相关推荐

  1. 利用WireShark进行DNS协议分析

    一.准备工作 系统是Windows 8.1Pro 分析工具是WireShark1.10.8 Stable Version 使用系统Ping命令发送ICMP报文. 二.开始工作 打开CMD.exe键入: ...

  2. 868-超详细 DNS 协议解析

    0. 前言 为了保证网址的正常访问,域名解析协议(DNS)其实在背后做出了很多努力,本文将透彻讲解 DNS 协议的原理,了解我们每天都在接触的网址到底是怎么工作的. 1. 什么是 DNS 协议 在学习 ...

  3. 超详细的 DNS 协议解析

    文章目录 0. 前言 1. 什么是 DNS 协议 2. 域名详解 3. 域名服务器详解 4. DNS 查询方式 5. 域名缓存 6. 完整域名解析过程 0. 前言 为了保证网址的正常访问,域名解析协议 ...

  4. wireshark协议解析器 源码分析 封装调用

    源码分析 Wireshark启动时,所有解析器进行初始化和注册.要注册的信息包括协议名称.各个字段的信息.过滤用的关键字.要关联的下层协议与端口(handoff)等.在解析过程,每个解析器负责解析自己 ...

  5. DNS传输协议解析!pcap报文中的域名获取

    回想一下,当我们想访问谷歌的时候,通常输入域名(网址):https://www.google.com,其实这就是一个域名. DNS 解析过程涉及将主机名(例如 https://www.google.c ...

  6. 调用wireshark(二):调用协议解析器

    上文[调用wireshark(一):初次尝试 http://www.cnblogs.com/zzqcn/archive/2013/05/11/3072362.html ]已经介绍了调用wireshar ...

  7. WireShark实战笔记之DNS协议分析

    DNS协议分析 DNS协议概述 DNS工作机理概述 dns报文 WireSahrk分析DNS协议 查看第一个包: 查看第四个包(响应包) DNS协议概述 DNS协议也可以称为DNS服务,全称是Doma ...

  8. DNS协议详解及报文格式分析

    https://blog.csdn.net/tianxuhong/article/details/74922454 目录 一. DNS协议理论知识 1.1. 域名结构 1.2. 域名服务器 1.3. ...

  9. 自己动手实现DNS协议

    1. 主要内容 不说废话,直接进入正题.先说说本文本文的主要内容,好让你决定是否看下去: 介绍DNS是干什么的: 介绍DNS是如何工作的: 介绍DNS请求与响应的消息格式: 编程实现一个简单的DNS服 ...

最新文章

  1. monorepo_Monorepo开发的要点
  2. 网络学习笔记—计算机网络基础
  3. java冒泡排序_Java冒泡排序,鸡尾酒排序
  4. java中websocket_Java中使用webSocket
  5. 【CodeForces - 920E】Connected Components? (dsu,补图连通块,STLset+map,bfs 或bitset)
  6. 最新可用的goole翻译接口
  7. 怎样从Mysql官网下载linux版本的mysql安装包
  8. 大学校园无线智能调频广播系统
  9. 12款高质量的免费 HTML 网页模板下载
  10. ROS | 服务通信的编程实现
  11. Unity 崩溃问题解决方法——之一
  12. 京东HBase平台进化与演进
  13. 修复 Key is stored in legacy trusted.gpg keyring
  14. java抽象类有什么用_java中抽象类的作用是什么?抽象类作用的例子
  15. python将doc导入数据库_用python将路径文件导入mysql数据库表
  16. 磨金石教育摄影技能干货分享|优秀作品欣赏—技巧十足的艺术摄影
  17. 集成基于Websocket的Stomp连接
  18. Trusted Applications介绍
  19. php写串口上位机,QT5串口编程—编写简单的上位机
  20. 内外网通过公网IP访问DMZ主机

热门文章

  1. react-native 常用命令
  2. linux重命名tar命令,linux常用操作指令4 —— 文件操作相关命令(mkdir、touch、rm、mv、cp、cat 、 find 、tar、chmod)...
  3. python websocket 客户端_aiohttp Websocket客户端和HTTP
  4. Quartz2D在项目中的实际使用
  5. 阿里巴巴持续投入,etcd 正式加入 CNCF
  6. Day2 - Python基础2作业【文件操作--购物车程序(用户操作及商户操作)】
  7. Altium Desgner软件,PCB设计中铺铜的作用
  8. 从产品的适用性以及费用方面考虑
  9. React组件设计之边界划分原则
  10. ​2018你不得不看的国内CRM软件排行榜