Wireshark抓包实战(dns)

一、WireShark界面介绍

如图 当我们使用'dig @223.5.5.5 baidu.com'指令获取百度的A记录时,采用Wireshark显示的内容如下

在Packet Details Pane(数据包详细信息), 在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为:

1) Frame: 物理层的数据帧概况

2)Ethernet II: 数据链路层以太网帧头部信息

3)Internet Protocol Version 4: 互联网层IP包头部信息

4.1若为tcp)Transmission Control Protocol: 传输层的数据段头部信息,TCP

4.2图为udp)User Datagram Protocol:用户数据报协议,此处为UDP

5)Domain Name System: 应用层的信息,此处是DNS协议

二、常见协议介绍

1. TCP/IP

三、DNS数据包的关键属性说明

DNS 分为查询请求和查询响应,请求和响应的报文结构基本相同。DNS 报文格式如图所示。

上图中显示了 DNS 的报文格式。其中,事务 ID、标志、问题计数、回答资源记录数、权威名称服务器计数、附加资源记录数这 6 个字段是DNS的报文首部,共 12 个字节。

整个 DNS 格式主要分为 3 部分内容,即基础结构部分、问题部分、资源记录部分。下面将详细地介绍每部分的内容及含义。

2.1 基础结构部分

DNS 报文的基础结构部分指的是报文首部,如图所示。

该部分中每个字段含义如下。

  • 事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。

  • 标志:DNS 报文中的标志字段。

  • 问题计数:DNS 查询请求的数目。

  • 回答资源记录数:DNS 响应的数目。

  • 权威名称服务器计数:权威名称服务器的数目。

  • 附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)。

基础结构部分中的标志字段又分为若干个字段,如图所示。

为了能够更好地了解 DNS 数据包的基础结构部分,下面通过捕获的 DNS 数据包查看基础结构部分。

下面我们针对应用层(Domain Name System query)里面的参数进行详细解释。

Domain Name System (query)                              #dns请求报文
    Transaction ID: 0x9ad0                              #事务ID
    Flags: 0x0000 Standard query                        #报文中的标志字段
        0... .... .... .... = Response: Message is a query
                                                    #QR字段, 值为0, 是一个请求包
                           (查询请求/响应的标志信息。查询请求时,值为 0;响应时,值为 1)
        .000 0... .... .... = Opcode: Standard query (0)
                                                    #Opcode字段, 值为0, 因为是标准查询
	                            (0 表示标准查询;1 表示反向查询;2 表示服务器状态请求。)
        .... ..0. .... .... = Truncated: Message is not truncated
                                                        #TC字段,0表示未被截断
    (表示是否被截断。值为 1 时,表示响应已超过 512 字节并已被截断,只返回前 512 个字节。)
        .... ...0 .... .... = Recursion desired: Don't do query recursively 
                                                        #RD字段,执行迭代查询
    (递归查询的标志是通过`RD`(Recursion Desired)标志位来设置的。如果客户端在查询请求中设置`RD`为1,表示客户端期望DNS服务器进行递归解析。如果设置为0(或者不设置,因为默认值为0),则表示客户端不希望服务器进行递归解析,而是执行迭代查询)
        .... .... .0.. .... = Z: reserved (0)           #保留字段, 请求应答值都为0
        .... .... ...0 .... = Non-authenticated data: Unacceptable   
                                                        #保留字段, 值为0
    (应答认证:应答/权限部分未由服务器进行认证,`0` 为应答服务器未验证了该查询相关的 DNSSEC 数字签名,`1` 为应答服务器已经验证了该查询相关的 DNSSEC 数字签名)
    Questions: 1                                        #问题计数, 这里有1个问题
    Answer RRs: 0                                       #回答资源记录数
    Authority RRs: 0                                    #权威名称服务器计数
    Additional RRs: 0                                   #附加资源记录数

在请求中 Questions 的值不可能为 0;Answer RRs,Authority RRs,Additional RRs 的值都为 0,因为在请求中还没有响应的查询结果信息。这些信息在响应包中会有相应的值。

特别的,当dig @223.5.5.5 www.baidu.com soa查询soa记录时,Wireshark抓取的dns请求数据包中会出现AD标志位,同时会发送“additional records”(额外记录)如下图所示

  • AD位代表“Authenticated Data”(认证数据)。当 DNS 响应中的 AD 位被设置(即“set”,用1表示)时,它指示响应中的“Answer”(回答)和“Authority”(权威)部分的数据已经通过数字签名进行了认证,并且 DNS 客户端可以确信这些数据没有被篡改。

2.1.2 DNS 响应数据包基础结构部分

图中方框标注部分为响应包中基础结构部分,每个字段如下:

Domain Name System (response)                                 #dns响应报文
    Transaction ID: 0xf3c2                                    #事务ID
    Flags: 0x8180 Standard query response, No error           #报文中的标志字段
        1... .... .... .... = Response: Message is a response
                                                              #QR字段, 值为1, 是一个响应包
        .000 0... .... .... = Opcode: Standard query (0)      
                                                    #Opcode字段, 值为0, 是标准查询
	                            (0 表示标准查询;1 表示反向查询;2 表示服务器状态请求。)
        .... .0.. .... .... = Authoritative: Server is not an authority for
        domain                                                #AA字段,不是权威服务器
		(授权应答,该字段在响应报文中有效。值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。)
        .... ..0. .... .... = Truncated: Message is not truncated
                                                              #TC字段,0表示未被截断
    (表示是否被截断。值为 1 时,表示响应已超过 512 字节并已被截断,只返回前 512 个字节。)
        .... ...1 .... .... = Recursion desired: Do query recursively 
                                                              #RD字段,1表执行迭代查询
    (递归查询的标志是通过RD标志位来设置的。如果客户端在查询请求中设置`RD`为1,表示客户端期望DNS服务器进行递归解析。如果设置为0(或者不设置,因为默认值为0),则表示客户端不希望服务器进行递归解析,而是执行迭代查询)
        .... .... 1... .... = Recursion available: Server can do recursive
        queries                                               #RA字段,可用递归
        (可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询)
        .... .... .0.. .... = Z: reserved (0)               #保留字段, 请求应答值都为0
        .... .... ..0. .... = Answer authenticated: Answer/authority portion
        was not authenticated by the server                 #AA标志位
        (授权应答,值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。)
        .... .... ...0 .... = Non-authenticated data: Unacceptable
                                                            #保留字段, 值为0
    (应答认证:应答/权限部分未由服务器进行认证,`0` 为应答服务器未验证了该查询相关的 DNSSEC 数字签名,`1` 为应答服务器已经验证了该查询相关的 DNSSEC 数字签名)
        .... .... .... 0000 = Reply code: No error (0)        #返回码字段
    (当值为 0 时,表示没有错误;当值为 1 时,表示报文格式错误(Format error),服务器不能理解请求的报文;当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。)
    Questions: 1
    Answer RRs: 2
    Authority RRs: 5
    Additional RRs: 5

三、Bind主从同步包的关键属性说明

3.1 环境说明

bind master:10.1.109.113

bind slave:10.1.109.114

bind version:9

通过Tcpdump抓取的数据包分析比较麻烦,要想很方便的分析数据包, 我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。

在slave运行抓包指令,并保存数据包为wireshark能识别的文件:

tcpdump -i ens33 -t -s 0  'not port 22 and src net 10.1.109.0/24' -w ./target.cap
  • AXFR

完全区域传输(Full zone transfer)或者称DNS全量更新协议,它传送的是整个区域的数据。

1) AXER slave向master发送请求报文

2) AXER master向slave发送响应报文

通过以上的测试,我们得出以下重要结论:

  • 辅区的搭建比较简单,如果是多个master则类似这样配置 masters { 192.168.3.160; 192.168.3.180; };

  • 辅区首次加载时slave发的是AXFR,即要做全量的区数据同步,从截图中能看到整个区的的数据内容,是明文的。抓包的过程能看到slave先请求SOA,然后通过建立TCP53端口建立连接传送区数据。

  • slave数据同步成功后,会在本地生成相关zone文件,但文件的内容是无法正常浏览的,类似二进制文件。管理员一定要做解析测试,确认数据同步和加载正常。

  • 此后如果人为重启slave节点的named进程,并不会再触发区传输请求。而重启master时会立即触发。

四、常用抓包指令

  • 抓取找到发出了请求,但是没有收到应答的 dns数据包以及DNS解析超过1秒

dns.time > 1 or (dns && (dns.flags.response == 0) && ! dns.response_in)
1.按照ip过滤
  • 查看源IP为192.168.1.1的包,目标ip为223.5.5.5

ip.src  192.168.1.1 and ip.dst  223.5.5.5
  • 查看ip为172.20.1.1的包

ip.addr == 172.20.1.1
2.按照mac地址过滤
  • 查看源MAC为74-D8-3E-0B-F9-A0的包,目标MAC为74-D8-3E-0B-F9-A1

eth.src  74-D8-3E-0B-F9-A0 and eth.dst  74-D8-3E-0B-F9-A0
  • 查看MAC为74-D8-3E-0B-F9-A0的包

eth.addr == 74-D8-3E-0B-F9-A0
3.按照端口号过滤
  • 查看过滤tcp端口为1234的包

tcp.port == 1234
  • 查看过滤源tcp端口为1234的包,目的tcp端口为8888的包

tcp.srcport  1234 and tcp.dstport  8888
4.按照协议类型过滤
  • 只某台电脑的dhcp报文

dhcp and eth.addr == 74-D8-3E-0B-F9-A0
  • 查看过滤源tcp端口为1234的包,目的tcp端口为8888的包

tcp.srcport  1234 and tcp.dstport  8888


Wireshark抓包实战(dns)
http://psj.ac.cn:80/archives/wiresharkzhua-bao-shi-zhan-dns
作者
peng
发布于
2024年05月28日
许可协议