头歌 DNS协议分析 第4关 NS 类型的 DNS 解析报文分析


任务描述

本关任务:分析 NS 类型的 DNS 报文 Type 字段及其请求与响应内容。

相关知识

为了完成本关任务,你需要掌握:

  1. 如何捕获 NS 类型的 DNS 报文;
  2. 如何解析 DNS 报文中的 Type 字段及应答字段。

如何捕获 NS 类型的 DNS 报文

DNS 中 NS 记录 NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个 DNS 服务器来进行解析。 在注册域名时,总有默认的 DNS 服务器,每个注册的域名都是由一个 DNS 域名服务器来进行解析的,DNS 服务器 NS 记录地址一般以以下的形式出现: ns1.domain.com、ns2.domain.com等。 简单的说,NS 记录是指定由哪个 DNS 服务器解析你的域名。

在执行 nslookup 时,可以通过指定参数 -type=NS 来查询指定域名对应的域名服务器。如下图所示。

解析 DNS 请求报文

通过 Wireshark 可以抓取执行上述操作报文列表。筛选 DNS 协议的报文,找到查询请求报文,展开如下图所示。

可以看出,请求查询报文的的 Type 字段为 NS ,即 Authorizative Name Server 。即希望得到权威的名字服务。 该请求报文是通过 UDP 协议进行传输的,端口号为 53 。

传输层协议使用 TCP 还是 UDP ?

DNS 可以使用 UDP/53 ,也可以使用 TCP/53 。当响应报文的长度小于 512B 时,就使用 UDP (因为 UDP 的最大报文长度为 512B );若响应报文的长度超过 512B ,则选用 TCP 。DNS 协议关于 UDP 和 TCP 的选择通常为以下两种情况: (1)若 DNS 客户程序事先知道响应报文的长度超过 512B ,则应当使用 TCP 连接;

注意:主域名服务器与辅助域名服务器在进行区域传送时,通常数据量都比较大,所以 DNS 规定,区域传送使用 TCP 协议。

(2)若解析程序不知道响应报文的长度,它一般使用 UDP 协议发送 DNS 查询报文,若 DNS 响应报文的长度大于 512B ,服务器就截断响应报文,并把 TC(truncated) 置为 1 。在这种情况下,DNS 客户程序通常使用 TCP 重发原来的查询请求,从而它将来能够从 DNS 服务器中收到完整的响应。

解析 DNS 应答报文

查看随后的响应报文,可以看到有多个响应报文。这些报文就是在进行解析baidu.com域名对应的权威服务器过程中响应的报文。展开这些报文,可以看到第一个响应报文如下图所示。

该报文应答部分有多个服务器地址,其第一个地址类型为 SOA(start of a zone of an authority),即权威区域的开始。其后的服务器地址类型为 SRV(Server selection),即服务器选择。 随后的多个报文都是对查询报文的响应。

由于前述响应报文长度大于 512B ,随后再次出现了一个查询请求报文,查看其传输层协议,可以看到换用了 TCP 协议。 同样有多个应答报文进行响应。查看这些报文的应答类型,有些是 SRV ,有些是 A(Address,内容是具体的 IP 地址)。 查看最后一个应答报文,如下图所示。

可以看出,其权威 DNS 服务器的名称为:ns.dns.cluster.local

操作要求

双击打开桌面上的工作区文件夹”workspace”,再打开实训文件夹”myshixun”中的项目文件夹,将查询的信息保存到文件message-4.txt。然后进行如下操作:

(1)打开 Wireshark ,并在过滤器中输入 DNS 。筛选出 DNS 协议报文,并开始捕获报文。然后打开终端,输入命令并执行nslookup -type=NS baidu.com,在 Wireshark 中停止捕获报文; (2)查看报文列表,将 DNS 查询消息的目标 IP 地址,写入文件中; (3)查看查询请求报文,将该报文的 Type 值写入文件中; (4)查看响应报文,查找baidu.com的权威 DNS 服务器,将其名字写入文件中; (5)查看上述响应报文,查找其 Type ,将其值写入文件中;

测试说明

平台会对你操作的结果进行测试,如果一切正确,你将顺利通关!!


开始你的任务吧,祝你成功!

实验操作

在终端输入:nslookup -ytpe=NS baidu.com(用来指定该域名由哪个 DNS 服务器来进行解析)

查询的目标地址为:172.21.0.10

打开 Wireshark ,并在过滤器中输入 DNS 。

打开请求报文,类型为:NS

 最后的出结果

### DNS协议分析 DNS(域名系统)作为互联网的核心协议之一,在网络通信中扮演着至重要的角色。为了深入理解DNS的工作机制及其在网络中的应用,可以通过多种方式对其进行详细的解析和研究。 #### 抓包工具的选择与使用方法 对于希望深入了解DNS协议的人来说,Wireshark是一个非常有用的工具。通过该软件能够捕获并查看实际传输过程中的DNS请求和响应报文[^1]。这不仅有助于了解标准查询操作的具体流程,还可以帮助识别潜在的安全威胁或异常行为模式。 #### 数据包结构详解 当涉及到具体的数据包包体时,每一个字段都有特定含义: - **事务ID**:用于匹配请求与应答之间的联。 - **标志位**:指示消息类型(如查询还是回应)、是否为递归查询等属性。 - **问题部分**:包含待解决的名字以及所期望返回的信息类别。 - **资源记录区**:提供有被询问主机的各种信息,比如IP地址映射系或其他辅助说明文字。 - **附加信息节**:有时会携带额外的支持性条目以增强主要答复的内容完整性[^4]。 #### 实验实践建议 鼓励读者尝试自行捕捉来自百度网站访问过程中所产生的DNS流量样本,并对比普通ICMP Echo Request (即Ping命令发出的数据帧),以此加深对两者差异性的认识[^2]。这种动手实操的经验将会极大地促进理论知识向实战技能转化的过程。 ```python import socket from scapy.all import * def dns_query(domain_name="www.example.com"): try: ip = socket.gethostbyname(domain_name) print(f"The IP address of {domain_name} is {ip}") # Capture packets using Scapy def packet_callback(packet): if packet.haslayer(DNSQR): # DNS query records print(f"[*] Detected DNS Query from {packet[IP].src}: {packet[DNSQR].qname.decode('utf-8')}") sniff(filter="udp port 53", prn=packet_callback, store=False) except Exception as e: print(e) if __name__ == "__main__": domain_to_lookup = input("Enter a domain name to look up its IP and monitor related DNS queries:") dns_query(domain_to_lookup) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值