• Wireshark数据抓包分析之域名系统协议


    预备知识

    什么是DNS

    DNS是域名系统(Domain Name System)的缩写,域名系统实际上就是为了解决IP地址的记忆难而诞生的,在互联网上域名与IP地址之间是一对一或者多对一的,如果要记住所有的IP地址,显然不太容易。虽然域名便于人们记忆,但主机之间只能相互认识IP地址,所有它们之间的转换就需要DNS来完成。
    DNS用于TCP/IP网络,它所提供的服务就是用来将主机名和域名解决为IP地址。DNS就是这样的一位“翻译官”,它的基本工作原理如下图:
    在这里插入图片描述

    DNS的系统结构

    在整个互联网中,如果将数以亿计主机的域名和IP地址对应关系交给一台DNS服务器管理,并处理整个互联网中客户机的域名解析请求,恐怕很难找到能够承受如此巨大负载的服务器,即便能够找到,查询域名的效率也会非常低。因此,互联网中的域名系统采用了分布式的数据库方式,将不同范围内的域名IP地址对应关系交给不同的DNS服务器管理。这个分布式数据库采用树状结构,全世界的域名系统具有唯一的“根”,如下图所示:
    在这里插入图片描述
    包含主机名及其所在的域名的完整地址又称为FQDN(Full Qualified Domain,完全限定域名)地址,或称为全域名。例如新浪网站服务器的地址“www.sina.com.cn”,其中“www”表示服务器的主机名(大多数的网站服务器都使用该名称),“sina.com.cn”表示该主机所属的DNS域。该地址中涉及多个不同的DNS及其服务器。简单介绍如下:
    “.”根域名服务器,是所有主机域名解析的源头,地址中最后的“.”通常被省略。
    “.cn”域名服务器,负责所有以“cn”结尾的域名的解析,“.cn”域是处于根域名之下的顶级域。
    “.com.cn”域服务器,负责所有以“com.cn”结尾的域名的解析,“.com.cn”域是“.cn”域的子域。
    “.sina.com.cn”域服务器,由新浪公司负责维护,提供“.sina.com.cn”域中所有主机的域名解析,如www.sina.com.cn,mail.sina.com.cn等,“.sina.com.cn”域是“.com.cn”域的子域。
    从上面的DNS层次结构中可以看出,对于互联网中每个主机域名的解析,并不需要涉及太多的DNS服务器就能完成。通常客户端主机中只需要指定1~3个DNS服务器地址,就可以通过递归或迭代的查询方式获知想要访问的域名对应的IP地址。

    DNS系统解析过程

    DNS服务采用服务器/客户端(C/S)方式工作。当客户端程序要通过一个主机名称访问网络中的一台主机时,它首先要得到这个主机名称所对应的IP地址。因为IP数据报中允许放置的是目的主机的IP地址,而不是主机名称。可以从本机的hosts文件中得到主机名称所对应的IP地址,但如果hosts文件不能解析该主机名称,则只能通过向客户机所设定的DNS服务器进行查询了。下面以www.sina.com.cn域名为例讲解DNS系统解析的过程,如下图:
    在这里插入图片描述
    在上图中,显示了DNS服务的解析过程,同时也体现出了它的构成。DNS服务由客户机、域名服务器和web服务器构成了一个简单的网络环境。DNS名称解析的过程如下:
    (1)DNS客户机向本地域名服务器发送了一个查询,请求查找域名www.sina.com.cn的IP。本地域名服务器查找自己保持的记录中,看能否找到这个被请求的IP地址。如果本地域名服务器中有这个地址,则将此地址返回给DNS客户机。
    (2)如果本地域名服务器中没有这个地址,则发起查找地址的过程。本地域名服务器发送请求给根域名服务器,询问www.sina.com.cn的相关地址。根域名服务器无法提供这个地址,但是会将域cn的名称服务器的地址返回给本地域名服务器。
    (3)本地域名服务器再向cn域名服务器发送查询地址请求。cn域服务器无法提供这个地址,就将.com.cn域服务器地址发送给本地域名服务器。
    (4)本地域名服务器再向.com.cn域服务器发送查询地址请求。com.cn域服务器无法提供这个地,就将sina.com.cn域名服务器地址发给本地域名服务器。
    (5)本地域名服务器再向sina.com.cn发送查询地址请求。sina.com.cn找到了www.sina.com.cn的地址。就将这个地址发送给本地域名服务器。
    (6)本地域名服务器将这个地址发给DNS客户机。
    (7)DNS客户机发起与主机www.sina.com.cn的链接。
    以上就是DNS域名解析的过程,在该解析过程中通常会用到两种查询方式,分别是递归查询和迭代查询。下面分别介绍这两种查询方式:
    1.递归查询:
    主机向本地域名服务器的查询采取此方法。如果主机所询问的本地域名服务器不指定所查询域名的IP地址,那么本地域名服务器就以DNS客户机的身份,向其他根域名服务器继续发出查询请求报文。
    2.迭代查询:
    本地域名服务器向根域名服务器的查询采取迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器“下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。

    DNS问题类型

    DNS查询和响应中所使用的类型域,指明了这个查询或者响应的资源记录类型。常用的消息资源记录类型如下表所示:
    在这里插入图片描述

    实验目的

    1.熟悉并掌握Wireshark的基本操作。
    2.加深对常用网络协议的理解,提高就业机会。
    3.培养学生理论联系实践的研究兴趣。

    实验环境

    在这里插入图片描述
    测试者:windows系统,IP地址:10.1.1.142
    设计者比较懒,实验环境比较粗糙,并且使用了非常规的方法来实现DNS的数据包抓取(合天的实验环境不允许连接网络,所以不能通过网页打开网址来抓取,阿弥陀佛)不过协议的数据是一样的,并且设计者也通过联网的机器获取了一份登录www.baidu.com的Wireshark抓包,请学习者自行分析对比。

    实验步骤一

    根据实验环境,本实验的步骤如下:
    1.测试环境中获取DNS数据包。
    2.分析DNS数据包。
    任务描述:获取两种类型的DNS数据包。
    (1)通过浏览器访问域名(www.baidu.com)来获取DNS数据:
    虽然合天实验室环境下,无法抓取此部分数据包(其实也可以自己搭建服务器,配置DNS服务器,但设计者比较懒,就将就下吧),但设计者希望学习的人能根据例子在自己的笔记本上抓取,然后分析。
    我们以登录www.baidu.com来获取DNS数据,启动Wireshark,在Filter中输入dns。打开浏览器,访问www.baidu.com,截图如下:
    在这里插入图片描述
    此抓包文件,设计者会沟通合天,放在实验机中,方便学生学习和对比下面的方法的不同。注意分析时请求和响应的帧号,比如帧号1284和帧号1338是一个完整的数据包。
    (2)通过ping未知域名(www.hetianlabdns.com)来获取DNS数据:
    与上面常用的方法相比,下面的方法比较另类,并且响应的数据中,缺少域名对应的IP(因为我们ping的域名,就没有对应的ip,哈哈哈哈哈)。
    启动Wireshark,过滤条件选择dns。打开命令行窗口,ping上面的域名,截图如下:
    在这里插入图片描述
    因为这个域名,是设计师虚构出来的,没有对应的IP,所以ping命令返回了提示。但这不影响我们获取到了DNS的数据包,按照之前讲解的DNS解析流程,这个请求域名在com域名后没有被找到,就返回给本地域名服务器,在由本地域名服务器告知DNS客户机。
    其产生的相应数据包如下:
    在这里插入图片描述
    下面实验,我们来分析分析数据包。也希望学习者能自己分析下baidu的数据包,其与ping产生的,有一点点不同。

    实验步骤二

    任务描述:分析DNS数据包。
    DNS只有两种报文,分别是查询报文和响应报文。他们的报文格式相同,如下:
    (1)DNS报文格式。
    在这里插入图片描述
    下面我们解释一下字段含义,方便下面的分析。
    DNS ID号(DNS ID Number):用来对于DNS查询和DNS响应。
    查询/响应(Query/Response,QR):用来指明这个报文是DNS查询还是响应,占1个比特位。如果是1,表示响应。如果是0,表示查询。
    操作代码(OpCode):用来定义消息中请求的类型,占4个比特位。
    权威应答(Authoritative Answer,AA):如果响应报文中设定了这个值,则说明这个响应是由域内权威域名服务器发出的,占1个比特位。
    截断(Truncation,TC):用来指明这个响应由于时间太长,无法接入报文而被截断。该标志位占1个比特位,当该标志位值为1时,表示响应已经超过512字节并以被截断。
    期望递归(Recursion Desired,RD):当请求中设定了这个值,则说明DNS客户端在目标域名服务器不含有所请求信息的情况下,要求进行递归查询。该标志位占1个比特位。
    可用递归(Recursion Available,RA):当响应中设定这个值,说明域名服务器支持递归查询,占1个比特位。
    保留(Z):在RFC1035的规定中全被设为0,但有时会被用来作为RCode域的扩展,占3比特位。
    响应代码(Response Code):在DNS响应中用来指明错误,占4个比特位。该字段的值通常为0和3,可取的值以及含义如下:
    1)0表示没有错误。
    2)1表示格式错误。
    3)2表示在域名服务器上存在问题。
    4)3表示域参数问题。
    5)4表示查询类型不支持。
    6)5表示在管理上被禁止。
    7)6~15表示保留。
    问题计数(Question Count):在问题区段中的条目数。
    问答计数(Answer Count):在回答区段中的条目数。
    域名服务器计数(Name Server Count):在权威区段的域名资源记录数。
    额外记录计数(Additional Records Count):在额外信息区段中的其他资源记录数。
    问题区段(Question section):大小可变,包含有被发送到DNS服务器的一条或多条信息查询的部分。
    回答区域(Answer section):大小可变,含有用来回答查询的一条或多条资源记录。
    权威区段(Authority section):大小可变,含有指向权威域名服务器的资源记录,用以继续解析过程。
    额外信息区域(Additional Information section):包含资源记录且大小可变的区段,这些资源记录用来存储完全没有必要回答的查询相关的额外信息。
    (2)DNS查询数据包:
    下面,我们以dns-ping文件来分析DNS协议,抓包如下图:
    在这里插入图片描述
    上图中的Info信息中,可以看出是DNS的查询包,其他协议这里不多介绍,不理解的,可以去相关的实验中学习,我们来主要看DNS协议。

    Domain Name System (query)                                                                                 #DNS 查询
    Response In: 2078
    Transaction ID: 0x3061                                                                                            #DNS ID号
    Flags: 0x0100 Standard query                                                                                 #标志
    0... .... .... .... = Response: Message is a query                                                           #响应消息,值为0,表示是DNS查询
    .000 0... .... .... = Opcode: Standard query (0)                                                           #操作代码
    .... ..0. .... .... = Truncated: Message is not truncated                                                #截断
    .... ...1 .... .... = Recursion desired: Do query recursively                                           #期望递归
    .... .... .0.. .... = Z: reserved (0)                                                                                   #保留
    .... .... ...0 .... = Non-authenticated data: Unacceptable
    Questions: 1                                                                                                            #问题计数为1
    Answer RRs: 0                                                                                                         #回答计数为0
    Authority RRs: 0                                                                                                      #域名服务器计数为0
    Additional RRs: 0                                                                                                    #额外计数为0
    Queries                                                                                                                   #问题区段
    wwww.hetianlab.com: type A, class IN
    Name: wwww.hetianlab.com                                                                                 #请求的域名
    Name Length: 18
    Label Count: 3
    Type: A (Host Address) (1)                                                                                   #域名类型为A(主机地址)
    Class: IN (0x0001)                                                                                                #地址类型为IN(互联网地址)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    以上信息就是DNS协议包的详细信息,在标志位字段,可以看到该包是一个DNS请求包,请求的域名为www.hetianlabdns.com,类型为A。将以上信息对应到DNS报文格式中,如下:
    在这里插入图片描述
    (3)DNS响应数据包:
    下面,我们来分析下相应的数据包,如下图:
    在这里插入图片描述
    在上图中Info列可以看出,这是个DNS相应的数据包。下面我们来详细的看下:

    Domain Name System (response)                                                                            #DNS相应
    Request In: 2029
    Time: 0.471163000 seconds                                                                                     #DNS 相应时间
    Transaction ID: 0x3061                                                                                             #DNS ID
    Flags: 0x8183 Standard query response, No such name                                         #标志
    1... .... .... .... = Response: Message is a response                                                      #相应消息,1,表示是DNS响应
    .000 0... .... .... = Opcode: Standard query (0)                                                           #操作码
    .... .0.. .... .... = Authoritative: Server is not an authority for domain                        #权威应答
    .... ..0. .... .... = Truncated: Message is not truncated                                                #截断
    .... ...1 .... .... = Recursion desired: Do query recursively                                           #期望递归
    .... .... 1... .... = Recursion available: Server can do recursive queries                        #可用递归
    .... .... .0.. .... = Z: reserved (0)                                                                                    #保留
    .... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
    .... .... ...0 .... = Non-authenticated data: Unacceptable
    .... .... .... 0011 = Reply code: No such name (3)                                                       #响应代码
    Questions: 1                                                                                                            #问题计数为1
    Answer RRs: 0                                                                                                         #回答计数为0(此处表示没有找到域名对应的IP)
    Authority RRs: 1                                                                                                     #域名计数器计数为1
    Additional RRs: 0                                                                                                    #额外记录计数为0
    Queries                                                                                                                   #问题区域
    wwww.hetianlab.com: type A, class IN
    Name: wwww.hetianlab.com                                                                                 #请求的域名
    Name Length: 18
    Label Count: 3
    Type: A (Host Address) (1)                                                                                     #域名类型
    Class: IN (0x0001)                                                                                                  #地址类型为IN(互联网地址)
    Authoritative nameservers                                                                                    #权威域名服务器,其下面的是一些解释信息,不过多介绍
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    之前说过,我们使用ping一个未知的域名来获取DNS数据,而域名本身没有在互联网上注册,按照DNS解析的原理就会知道,最后是无法得到域名对应的IP。所以上面的Answer RRS为0。
    而同学有些兴趣可以看下实验环境中,访问百度的DNS抓包,就会发现其Answer RRs不为0,并且在问题区域(Queries)的下面,会列出回答区域。请同学们自己查看分析。
    我们将上面分析的数据,填入DNS报文中,具体如下:
    在这里插入图片描述
    好了,DNS协议,就先分析到这里,还是希望同学们自己通过合天的基础知识学习后,能访问互联网来抓取DNS进行详细分析,增加自己的知识储备。

  • 相关阅读:
    xlsx使用table_to_book报错Uncaught Unsupported origin when DIV is not a TABLE
    ipmitool下载地址和编译安装时可能出现的问题
    【Python】Numpy生成等差数组
    小白也想搞科研(二)之代码升级
    算法金 | 这绝对是不一样的,独一无二的逻辑回归算法体验
    修炼k8s+flink+hdfs+dlink(六:学习namespace,service)
    web前端网页设计期末课程大作业:中华传统文化题材网页源码——基于HTML实现中国水墨风书画艺术网站(12个页面)
    Excel比较两列数据,并找出不同
    FFplay文档解读-50-多媒体过滤器四
    Attention机制学习记录(四)之Transformer
  • 原文地址:https://blog.csdn.net/ChuMeng1999/article/details/126211864