Wireshark Lab(三)—— DNS

256 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

引言

上一篇通过 Wireshark 了解了 HTTP GET 方法的交互过程和消息格式,并且通过抓包了解了获取大的 HTML 文件、带有嵌入文件的 HTML 文件的交互流程。

The Domain Name System (DNS) 是将主机名转换为 IP 地址,在互联网基础设施中发挥着关键作用。在本篇文章将仔细研究 DNS 的客户端。客户端在 DNS 中的角色相对简单 – 客户端向其本地 DNS 服务器发送查询,并收到响应。

DNS

使用 IP 地址太烦琐而难以使用和记忆,因此互联网支持使用 主机名称(host names)来识别包括客户机和服务器在内的主机。主机名称通过名称解析(name resolution)转换成 IP 地址。在互联网中存在不同形式的名称解析,但最普遍、最重要的一种是采用分布式数据库系统,即域名系统(DNS)

DNS 是一个分布式的客户端/服务器网络数据库,TCP/IP 应用程序使用他来完成主机名称和 IP 地址之间的映射(反之亦然),提供电子邮件路由信息、服务命名和其他服务。之所以是说是分布式的数据库是因为互联网中没有一个单独的站点能够知道所有的信息,每一个站点(如学院、大学、公司或公司的部门)维护自己的信息数据库,并运行一个服务器程序供互连网上的其他系统(客户端程序)查询。DNS 提供了允许客户机和服务器互相通信的协议,并且也提供了服务器之间交互信息的协议。

从应用程序的角度来看,访问 DNS 是通过一个成为地址解析器(resolver)的应用程序库来完成的。通常,在请求 TCP 打开一个连接或使用 UDP 发送一个单播数据报之前,应用程序必须将主机名称转换为 IPv4 或 IPv6 地址。TCP 和 IP 协议实现对 DNS 一无所知,他们只对地址进行操作。

需要使用的命令

nslookup

nslookup 允许运行该工具的主机查询任何指定的 DNS 服务器以获取 DNS 记录。nslookup 将 DNS 查询发送到指定的 DNS 服务器,从同一 DNS 服务器接收 DNS 回复,并显示结果。

执行如下命令,请求将 www.mit.edu IP 地址发送给客户端,其返回结果是

  • 提供 DNS 服务器的名称和 IP 地址
  • www.mit.edu 的主机名和 IP 地址
$ nslookup www.mit.edu

请求结果

image-20221225204652451.png

ipconfig/ifconfig

ipconfig (for Windows) and ifconfig (for Linux/Unix) 可用于显示当前的 TCP/IP 信息,包括地址、DNS 服务器地址、适配器类型等。

使用 Wireshark 追踪 DNS

执行步骤

  • 打开 Wireshark capture
  • 执行 nslookup www.mit.edu
  • 停止 Wireshark capture

执行结果

我们可以看到请求 DNS 使用的是 UDP 传输协议本地端口是 59224 服务端端口是53。在 response 结果的 Answers 中返回了 DNS 的结果。

image-20221225212121496.png