使用Wireshark进行DNS协议解析
“ 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协议解析相关推荐
- 利用WireShark进行DNS协议分析
一.准备工作 系统是Windows 8.1Pro 分析工具是WireShark1.10.8 Stable Version 使用系统Ping命令发送ICMP报文. 二.开始工作 打开CMD.exe键入: ...
- 868-超详细 DNS 协议解析
0. 前言 为了保证网址的正常访问,域名解析协议(DNS)其实在背后做出了很多努力,本文将透彻讲解 DNS 协议的原理,了解我们每天都在接触的网址到底是怎么工作的. 1. 什么是 DNS 协议 在学习 ...
- 超详细的 DNS 协议解析
文章目录 0. 前言 1. 什么是 DNS 协议 2. 域名详解 3. 域名服务器详解 4. DNS 查询方式 5. 域名缓存 6. 完整域名解析过程 0. 前言 为了保证网址的正常访问,域名解析协议 ...
- wireshark协议解析器 源码分析 封装调用
源码分析 Wireshark启动时,所有解析器进行初始化和注册.要注册的信息包括协议名称.各个字段的信息.过滤用的关键字.要关联的下层协议与端口(handoff)等.在解析过程,每个解析器负责解析自己 ...
- DNS传输协议解析!pcap报文中的域名获取
回想一下,当我们想访问谷歌的时候,通常输入域名(网址):https://www.google.com,其实这就是一个域名. DNS 解析过程涉及将主机名(例如 https://www.google.c ...
- 调用wireshark(二):调用协议解析器
上文[调用wireshark(一):初次尝试 http://www.cnblogs.com/zzqcn/archive/2013/05/11/3072362.html ]已经介绍了调用wireshar ...
- WireShark实战笔记之DNS协议分析
DNS协议分析 DNS协议概述 DNS工作机理概述 dns报文 WireSahrk分析DNS协议 查看第一个包: 查看第四个包(响应包) DNS协议概述 DNS协议也可以称为DNS服务,全称是Doma ...
- DNS协议详解及报文格式分析
https://blog.csdn.net/tianxuhong/article/details/74922454 目录 一. DNS协议理论知识 1.1. 域名结构 1.2. 域名服务器 1.3. ...
- 自己动手实现DNS协议
1. 主要内容 不说废话,直接进入正题.先说说本文本文的主要内容,好让你决定是否看下去: 介绍DNS是干什么的: 介绍DNS是如何工作的: 介绍DNS请求与响应的消息格式: 编程实现一个简单的DNS服 ...
最新文章
- monorepo_Monorepo开发的要点
- 网络学习笔记—计算机网络基础
- java冒泡排序_Java冒泡排序,鸡尾酒排序
- java中websocket_Java中使用webSocket
- 【CodeForces - 920E】Connected Components? (dsu,补图连通块,STLset+map,bfs 或bitset)
- 最新可用的goole翻译接口
- 怎样从Mysql官网下载linux版本的mysql安装包
- 大学校园无线智能调频广播系统
- 12款高质量的免费 HTML 网页模板下载
- ROS | 服务通信的编程实现
- Unity 崩溃问题解决方法——之一
- 京东HBase平台进化与演进
- 修复 Key is stored in legacy trusted.gpg keyring
- java抽象类有什么用_java中抽象类的作用是什么?抽象类作用的例子
- python将doc导入数据库_用python将路径文件导入mysql数据库表
- 磨金石教育摄影技能干货分享|优秀作品欣赏—技巧十足的艺术摄影
- 集成基于Websocket的Stomp连接
- Trusted Applications介绍
- php写串口上位机,QT5串口编程—编写简单的上位机
- 内外网通过公网IP访问DMZ主机
热门文章
- react-native 常用命令
- linux重命名tar命令,linux常用操作指令4 —— 文件操作相关命令(mkdir、touch、rm、mv、cp、cat 、 find 、tar、chmod)...
- python websocket 客户端_aiohttp Websocket客户端和HTTP
- Quartz2D在项目中的实际使用
- 阿里巴巴持续投入,etcd 正式加入 CNCF
- Day2 - Python基础2作业【文件操作--购物车程序(用户操作及商户操作)】
- Altium Desgner软件,PCB设计中铺铜的作用
- 从产品的适用性以及费用方面考虑
- React组件设计之边界划分原则
- ​2018你不得不看的国内CRM软件排行榜