DNS抓包分析
⛵️👹 友情链接🍦🌊
一、DNS概述
DNS(Domain Name System,域名系统)是互联网上是一种层次结构的基于域的命名方式和实现这种命名方式的分布式数据库,其中记录了各种主机域名与 IP 地址的对应关系,能够使用户更加方便的访问网站。用户可以直接输入域名登录网站,DNS会将域名解析成IP地址,然后用户根据这个IP地址找到相应的网站,从而访问到域名对应的网站,通过主机名获取到主机名对应IP地址的过程叫作域名解析。
二、DNS报文格式
三、报文标志字段格式
- QR (Query/Response): 1位,标志查询或响应。当QR=0时,表示这是一个查询报文;当QR=1时,表示这是一个响应报文。
- Opcode (Operation Code): 4位,标志DNS操作的类型。一些常见的值包括:
- 0: 标准查询
- 1: 逆向查询
- 2: 服务器状态请求
- 4: 更新
- AA (Authoritative Answer): 1位,用于指示响应是否来自权威DNS服务器。如果AA=1,表示响应来自权威服务器,否则为0。
- TC (Truncation): 1位,指示报文是否被截断。如果TC=1,表示报文太大而被截断。
- RD (Recursion Desired): 1位,若为0则表示迭代查询,1位递归查询
- RA (Recursion Available): 1位,表示DNS服务器是否支持递归查询。如果RA=1,表示DNS服务器支持递归查询。
- Z (Reserved): 3位,为将来的使用保留,通常设置为0
- RCODE (Response Code): 4位,用于指示响应的状态。一些常见的响应代码包括:
- 0: 没有错误
- 1: 格式错误
- 2: 服务器故障
- 3: 域名不存在
- 4: 查询类型不支持
- 5: 拒绝查询
四、DNS的简略过程
发送一个查询包(query)
接收一个回复包(response)
五、常见资源记录类型
- A 记录(Address Record): 用于将主机名映射到IPv4地址。
- AAAA 记录(IPv6 Address Record): 用于将主机名映射到IPv6地址。
- CNAME 记录(Canonical Name Record): 用于创建别名,将一个域名指向另一个域名。
- TXT 记录(Text Record): 用于存储文本信息,通常用于验证域名所有权和其他用途。
- SOA 记录(Start of Authority Record): 用于指定域名的权威DNS服务器和其他参数
- NS 记录(Name Server Record): 用于指定域名的权威DNS服务器。
六、抓包分析
准备工作【基于wireshark】
-
在window系统打开控制台输入
www.bloh.csdn.net
-
开启wirshark找到正在访问互联网的网卡,筛选DNS包,开始抓包
-
**如何找到正在访问的网卡?**首先打开网络和共享中心
-
然后点击连接【此处是WLAN(SXXXNET)】,之后点击详细信息
-
然后就可以看到当前网卡详细的连接信息
-
-
继上述第二步发现自己网络连接的详细信息后看到wireshark页面,下面第一张图片的绿色区域选择DNS
-
首先点击捕获并选择选项进行筛选
-
找到对应的网络连接:点击开始即可
-
-
做好上述的工作之后cmd就可以ping
www.bloh.csdn.net
网址并捕获DNS包了,我们首先看到数据查询包(Query)- 可以看到资源记录类型为
A
,说明是IPV4的映射,是一个query
查询报文 - 同时看到
port:53
说明运行端口在53,RD=1
说明是递归查询
- 可以看到资源记录类型为
-
看完上述的查询报文【query】,现在我们来分析分析回应报文【response】
6.1、标志字段详细分析
Flags: 0x8180 Standard query response, No error
1... .... .... .... = Response: Message is a response #QR字段
.000 0... .... .... = Opcode: Standard query (0) #Opcode字段
.... .0.. .... .... = Authoritative: Server is not an authority for domain #AA字段
.... ..0. .... .... = Truncated: Message is not truncated #TC字段
.... ...1 .... .... = Recursion desired: Do query recursively #RD字段
.... .... 1... .... = Recursion available: Server can do recursive queries #RA字段
.... .... .0.. .... = Z: reserved (0) #Z保留字段
.... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
.... .... ...0 .... = Non-authenticated data: Unacceptable
.... .... .... 0000 = Reply code: No error (0) #rCode字段
6.2、问题部分
Queries #问题部分
www.blog.csdn.net: type A, class IN
Name: www.blog.csdn.net #查询名字段:这里是请求域名
[Name Length: 17]
[Label Count: 4]
Type: A (1) (Host Address) #查询类型字段,这里为A类型
Class: IN (0x0001) #查询类字段,这里为互连网地址
6.3、答案部分
Answers #回答区域字段
www.blog.csdn.net: type CNAME, class IN, cname 3b7c892a.csdn.net.cname.yunduns.com
Name: www.blog.csdn.net #域名西段,这里是请求的域名:www.blog.csdn.net
Type: CNAME (5) (Canonical NAME for an alias) #类型字段:CNAME
Class: IN (0x0001) #查询类字段:IN
Time to live: 600 (10 minutes) #生产时间TTL
Data length: 37 #数据长度
CNAME: 3b7c892a.csdn.net.cname.yunduns.com #资源数据,此处为域名的规范跳转
3b7c892a.csdn.net.cname.yunduns.com: type A, class IN, addr 220.185.184.6
Name: 3b7c892a.csdn.net.cname.yunduns.com
Type: A (1) (Host Address)
Class: IN (0x0001)
Time to live: 600 (10 minutes)
Data length: 4
Address: 220.185.184.6 #资源数据:此处为IP地址
七、两种查询机制的分析
1. 递归查询:
- 工作过程:
- 客户端向本地DNS服务器发出DNS查询请求。
- 本地DNS服务器首先查看自己的缓存,如果有相应记录,直接返回。如果没有相应记录,它会向根DNS服务器发送查询请求
- 根DNS服务器返回一个指向顶级域名服务器的引导答案。
- 本地DNS服务器再向顶级域名服务器查询,然后一级一级地递归查询,直到找到所需的域名解析记录。最终的解析结果返回给客户端。
- 优点:
- 客户端只需向本地DNS服务器发送请求。
- 可以缓存解析结果,提高响应速度。
- 缺点:
- 增加了本地DNS服务器的负担,因为它必须执行多次迭代查询。
- 可能会导致网络拥塞,因为本地DNS服务器需要多次向其他DNS服务器发出查询请求。
2. 迭代查询:
- 工作过程:
- 客户端向本地DNS服务器发出DNS查询请求。
- 本地DNS服务器向根DNS服务器发送查询请求。
- 根DNS服务器返回一个指向顶级域名服务器的引导答案,但不执行递归查询。
- 本地DNS服务器再向顶级域名服务器查询,然后向下级域名服务器查询,直到找到所需的域名解析记录。
- 本地DNS服务器将中间的查询结果返回给客户端,客户端自行执行下一步查询。
- 优点:
- 减轻了本地DNS服务器的负担,因为它不需要执行多次递归查询。
- 减少了网络拥塞,因为每个DNS服务器只需执行一次查询并返回结果。
- 缺点:
- 对于客户端来说,需要更多的DNS查询步骤和处理。
当前的互联网环境更适合采用递归查询。避免客户端多次操作,减少理解DNS的1复杂性