《计算机网络—自顶向下方法》 第二章Wireshark实验2:DNS

2023-05-16

实验(WireShark实验之DNS)描述

如书中第2.5节所述,域名系统(DNS)将主机名转换为IP地址,在互联网基础架构中发挥关键作用
在本实验中,我们将仔细查看DNS在客户端的细节。回想一下,客户端在DNS中的角色相对简单——客户端向其本地DNS服务器发送请求,并接收一个响应。如书中的图2.21和2.22所示,由于DNS分层服务器之间相互通信,可以递归地或迭代地解析客户端的DNS查询请求,而大多数操作是不可见的。然而,从DNS客户端的角度来看,协议非常简 ——将查询指向为本地DNS服务器,并从该服务器接收到响应。
在开始本实验之前,您可能需要阅读书中的第2.5节来了解DNS。另外,您可能需要查看关于本地DNS服务器,DNS缓存,DNS记录和消息,以及DNS记录中的TYPE字段的资料


1. nslookup

在本实验中,我们将大量使用nslookup工具,这个工具在现在的大多数Linux/Unix和Microsoft平台中都有。要在Linux/Unix中运行nslookup,您只需在命令行中键入nslookup命令即可。
要在Windows中运行,请打开命令提示符并在命令行上运行nslookup
在这是最基本的操作,nslookup工具允许主机查询任何指定的DNS服务器的DNS记录。DNS服务器可以是根DNS服务器,顶级域DNS服务器,权威DNS服务器或中间DNS服务器。要完成此任务,nslookup将DNS查询发送到指定的DNS服务器(默认为本地DNS服务器),然后接收DNS回复,并显示结果。

第一个命令:
nslookup www.mit.edu
在这里插入图片描述
这个命令是说,通过nslookup我想知道www.mit.edu这个URL地址的一些信息(IP地址等等)。

第二个命令:
nslookup -type=NS mit.edu
在这里插入图片描述
在这个例子中,我们添加了选项-type=NS和域名mit.edu。这将使得nslookup将NS记录发送到默认的本地DNS服务器。换句话说,“请给我发送mit.edu的权威DNS的主机名” (当不使用-type选项时,nslookup使用默认值,即查询A类记录。)

第三个命令(我这里请求超时了):
在这里插入图片描述
在这个例子中,我们希望将查询请求发送到DNS服务器bitsy.mit.edu ,而不是默认的DNS服务器(dns-prime.poly.edu)。因此,查询和响应事务直接发生在我们的主机和 bitsy.mit.edu 之间。在这个例子中,DNS服务器 bitsy.mit.edu 提供主机 www.aiit.or.kr 的IP地址,它是高级信息技术研究所(韩国)的Web服务器。

nslookup命令的一般语法
nslookup -option1 -option2 host-to-find dns-server

一般来说,nslookup可以不添加选项,或者添加一两个甚至更多选项。
正如我们在上面的示例中看到的,dns-server也是可选的;如果这项没有提供,查询将发送到默认的本地DNS服务器。

现在我们提供了总览了nslookup(上面的都是官方文档中的内容,只是查询结果是我自己跑出来的),现在是你自己驾驭它的时候了。执行以下操作(并记下结果):

  1. 运行nslookup以获取一个亚洲的Web服务器的IP地址。该服务器的IP地址是什么
    答:
    获取清华大学的Web服务器的IP地址:166.111.4.100
    上面的101.198.199.200本地DNS服务器
    在这里插入图片描述

  2. 运行nslookup来确定一个欧洲的大学的权威DNS服务器
    答:
    获取剑桥大学的Web服务器IP地址:128.232.132.8
    在这里插入图片描述
    获取剑桥大学使用的权威DNS服务器名称(按道理应该在非权威应答后面,显示很多权威应答和对应的IP地址的,但是这里我也搞不清)
    在这里插入图片描述

  3. 运行nslookup,使用问题2中一个已获得的DNS服务器,来查询Yahoo!邮箱的邮件服务器。它的IP地址是什么?
    答:
    我这里是直接查询(没有问题2已获得的DNS服务器来查询)了新浪的邮箱服务器IP地址:123.126.157.222
    在这里插入图片描述
    直接查询雅虎的邮箱服务器IP地址:74.6.160.138
    在这里插入图片描述

注:(我的主观方法,不一定绝对地正确)
如果对查询到的IP地址不信任(就是查出来好多IP地址,但是不会看,可以通过查看所在地来判断),
例如,我对上面雅虎的邮箱服务器IP地址不确定,我就百度发现是美国的,那应该就没问题了。
在这里插入图片描述


2. ipconfig

ipconfig对于Windows)和ifconfig对于Linux / Unix)是主机中最实用的程序,尤其是用于调试网络问题时。这里我们只讨论ipconfig,尽管Linux / Unix的ifconfig与其非常相似。 ipconfig可用于显示您当前的TCP/IP信息,包括您的地址,DNS服务器地址,适配器类型等

例如,您只需进入命令提示符,输入:
ipconfig/all
关于该主机的所有信息都显示出来了:
在这里插入图片描述

ipconfig对于管理主机中存储的DNS信息也非常有用
在第2.5节中,我们了解到主机可以缓存最近获得的DNS记录(也就是比如最近已经访问过一个网站,也就是通过DNS查询过一次IP地址,那么立即访问的话,就可以直接从本地的DNS缓存中获得,提高了速度,也减缓了远端DNS服务器的压力)。

要查看这些缓存记录及其信息,输入:
ipconfig/displaydns
在这里插入图片描述
比如我最近访问了百度,就保存了百度的IP地址,下一次访问就可以直接从本地得到IP地址了

要清除缓存,输入:
ipconfig/flushdns
在这里插入图片描述
可以很明显的看到百度的缓存信息已经被清除了


3. 使用Wireshark追踪DNS

现在,我们熟悉nslookup和ipconfig,我们准备好了一些正经的事情。首先让我们捕获一些由常规上网活动生成的DNS数据包。

  • 使用ipconfig清空主机中的DNS缓存。
  • 打开浏览器并清空浏览器缓存。
  • 打开Wireshark,然后在过滤器中输入ip.addr==your_IP_address,您可以先使用ipconfig获取你的IP地址。此过滤器将删除既从不你主机发出也不发往你主机的所有数据包(也就显示出来的都是,从本地发出or从外地发往本地的数据包)。
  • 在Wireshark中启动数据包捕获。
  • 使用浏览器访问网页:http://www.ietf.org
  • 停止数据包捕获。

这里设置的过滤器是http
在这里插入图片描述

这是过滤器为ip.addr==192.168.43.189,后面的为我的电脑的IPv4地址:
在这里插入图片描述

回答问题

  1. 找到DNS查询和响应消息。它们是否通过UDP或TCP发送?
    答:
    UDP在这里插入图片描述
    在这里插入图片描述

  2. DNS查询消息的目标端口是什么? DNS响应消息的源端口是什么?
    答:
    源端口Src Port: 53
    目标端口51508
    在这里插入图片描述

  3. DNS查询消息发送到哪个IP地址?使用ipconfig来确定本地DNS服务器的IP地址。这两个IP地址是否相同?
    答:
    DNS查询消息发送到的IP地址101.198.199.200
    在这里插入图片描述
    本地DNS服务器的IP地址101.198.199.200
    在这里插入图片描述
    注:

参考答案中说两个DNS服务器(远端or本地)IP地址是不相等的,但是我查到的是一样的(而且我也清除了浏览器和本地的DNS缓存),【待理解】。

  1. 检查DNS查询消息。DNS查询是什么"Type"的?查询消息是否包含任何"answers"?
    答:
    【之前不会看,然后又会了(但是没有保存,懒得重新搞了),就是在Domain Name System里面

  2. 检查DNS响应消息。提供了多少个"answers"?这些答案具体包含什么?
    答:
    【解释如上】

  3. 考虑从您主机发送的后续TCP SYN数据包。 SYN数据包的目的IP地址是否与DNS响应消息中提供的任何IP地址相对应?
    答:后续发送的TCP SYN数据包的目的IP地址DNS响应消息中提高的源IP地址 相对应。

  4. 这个网页包含一些图片。在获取每个图片前,您的主机是否都发出了新的DNS查询?
    答:
    没有,只有部分重新发送新的DNS查询 。


4. 结合nslookup+WireShark

  • 启动数据包捕获。
  • 使用nslookup查询 www.mit.edu
  • 停止数据包捕获。

将会看到如下的结果(设置过滤器为dns):
在这里插入图片描述
nslookup实际上发送了三个DNS查询,并对应的收到了三个DNS响应
只考虑本次实验相关结果,在回答以下问题时,请忽略前两组查询/响应,因为nslookup的一些特殊性,这些查询通常不是由标准网络应用程序生成的。您应该专注于最后一个查询和响应消息

  1. DNS查询消息的目标端口是什么? DNS响应消息的源端口是什么?
    答:
    源端口51926
    目标端口25
    在这里插入图片描述

  2. DNS查询消息的目标IP地址是什么?这是你的默认本地DNS服务器的IP地址吗?
    答:
    目标IP地址101.198.199.200,就是我本地的DNS服务器IP地址(所以我好奇,不应该是查询到了远端的DNS服务器吗)。
    在这里插入图片描述

  3. 检查DNS查询消息。DNS查询是什么"Type"的?查询消息是否包含任何"answers"?
    答:
    【解释如上】

  4. 检查DNS响应消息。提供了多少个"answers"?这些答案包含什么?
    答:
    【解释如上】

  5. 提供屏幕截图。
    答:
    以上。

现在重复上一个实验,但换成以下命令:
nslookup -type=NS mit.edu
(从第7行开始)
在这里插入图片描述

回答下列问题:

  1. DNS查询消息发送到的IP地址是什么?这是您的默认本地DNS服务器的IP地址吗?
    答:
    目标IP地址101.198.199.200,也是我本地的DNS服务器IP地址
    在这里插入图片描述

  2. 检查DNS查询消息。DNS查询是什么"Type"的?查询消息是否包含任何"answers"?
    答:
    【解释如上】

  3. 检查DNS响应消息。响应消息提供的MIT域名服务器是什么?此响应消息还提供了MIT域名服务器的IP地址吗?
    答:
    【解释如上】

  4. 提供屏幕截图。
    答:
    以上。

现在继续重复上上个实验,但换成以下命令:
nslookup www.aiit.or.kr bitsy.mit.edu
注:

DNS第一次查询消息发送的IP地址是默认的本地域名服务器,查询到bitsy.mit.edu的IP地址:18.72.0.3,之后向这个IP地址发送查询消息,但失败了,因为MIT的这个DNS服务器已停用
在这里插入图片描述
在这里插入图片描述

回答下列问题:

  1. DNS查询消息发送到的IP地址是什么?这是您的默认本地DNS服务器的IP地址吗?如果不是,这个IP地址是什么?
    答:
    发送到的IP地址101.198.198.198,不是我默认的本地DNS服务器的IP地址,这是默认的本地域名服务器
    在这里插入图片描述

  2. 检查DNS查询消息。DNS查询是什么"Type"的?查询消息是否包含任何"answers"?
    答:
    【解释如上】

  3. 检查DNS响应消息。提供了多少个"answers"?这些答案包含什么?
    答:
    【解释如上】

  4. 提供屏幕截图。
    答:
    以上。


参考资料:

https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《计算机网络—自顶向下方法》 第二章Wireshark实验2:DNS 的相关文章

  • VS 2015运行报错

    VS 2015运行报错 xff1a L N K 1104 无法打开文件 kernel 32 lib xff0c L N K 1158 xff1a 无法运行 34 r c e x e xff0c L N K 156 必须定义入口点 34 的问
  • fatal: remote error: access denied or repository not exported: /x264

    root 64 ubuntu opt git clone git git videolan org x264 正克隆到 39 x264 39 fatal remote error access denied or repository no
  • 64位ubuntu虚拟机编译后可运行,32位的arm不能运行的原因

    这两天遇到一个怪事 xff0c 就是在64位虚拟机上使用asn1c工具编译生成的asn源文件 xff0c 交叉编译生成静态库 xff0c 在虚拟机上跑的好好的 xff0c 但是在arm上跑的时候无法解码 xff0c 最后查明原因是asn1c
  • 如何使用交叉编译将大量源文件生成动态库

    今天要把算法包生成一个动态库放在ARM上调用运行 xff0c 特此记录一下给大家参考 1 首先将算法文件夹中的源程序生成 o文件 arm span class token operator span linux span class tok
  • 结构体赋值运行时出现段错误(核心已转储)

    今天给嵌套结构体赋值的时候编译没问题 xff0c 但是运行总是段错误 xff0c 后来发现是忘了分配动态内存 xff0c 记得用calloc分配 xff0c 实际结构体嵌套比较复杂 xff0c 在这里举个简单的例子给大家看看 xff0c 引
  • 如何将一段字符串在word中,自动删除换行,两两之间增加空格键

    我们在拉取十六进制数据分析时 xff0c 经常遇到对方只给一条长长的字符串 xff0c 当然 xff0c 我们可以通过代码的方式进行空格添加 xff0c 方便阅读 xff0c 但是有时候身边没有编译工具或者流程复杂 xff0c 介绍一个用w
  • Python学习第5天——洛谷刷题(顺序结构)、循环

    Python学习第5天 1 洛谷刷题1 1 顺序结构1 2 高精度 2 循环2 1 while循环2 2 for循环2 3 range xff08 xff09 函数2 4 用for循环绘图练习2 4 1 绘制同心圆2 4 2 绘制棋盘格 1
  • 如何定义字符串

    如何定义字符串 一维和二维的都可以 xff1b 一维的情况如下 xff1a 1 xff0c char string0 10 2 xff0c char string1 61 34 prison break 34 3 xff0c char st
  • static全局变量与普通的全局变量的区别?

    1 static全局变量与普通的全局变量有什么区别 xff1f static局部变量和普通局部变量有什么区别 xff1f static函数与普通函数有什么区别 xff1f 答 xff1a 全局变量 外部变量 的说明之前再冠以static 就
  • 动态存储方式和静态存储方式

    从变量的作用域的角度来观察 xff0c 变量可以分为全局变量 和局部变量 xff1b 全局变量都是存放在静态存储区中的 因此它们的生存期是固定的 xff0c 存在于程序的整个运行过程 局部变量 xff0c 如果不专门声明存储类别 xff0c
  • c语言中的return 0有什么用?

    return 0是正常退出 xff0c return 非零是异常退出 xff0c 这是返回给控制台的 xff0c 不在编的程序的控制范围内 xff0c 是给操作系统识别的 xff0c 对你的程序无影响 如果是C中 xff0c 定义void
  • JAVA代码实现字符串匹配(一)——BF、KMP

    话不多说 xff0c 直接进入主题 xff1a 题目描述 xff1a 给定两个字符串text和pattern xff0c 请你在text字符串中找出pattern字符串出现的第一个位置 xff08 下标从0开始 xff09 xff0c 如果
  • pwntools, terminal =‘tmux‘ 报错

    pwntools terminal 61 tmux 报错 Traceback most recent call last File exp py line 4 in gdb attach File home pwn pwn lib pyth
  • 更改手动导入的wsl的默认登录用户

    导入了一个wsl后 xff0c 每次登录都是root用户 xff0c 这个就有点不太好 网上的教程都是说在ps里用分发版的对应exe文件来设置默认用户 xff0c 但是导入的这个wsl我没找到这个exe 找了半天然后看了微软官方的教程 xf
  • v8安装fetch不上

    大佬方案 xff1a 白嫖github action 感谢大佬
  • pwnabletw-babystack

    BabyStack 思路 危险函数 xff0c strcpy 在copy的时候strcpy看似没有问题 xff0c 但是由于src的内容并没有清空 xff0c 还保存着被销毁栈的原有数据 xff0c 而strcpy是根据 34 x00 34
  • vmware win7虚拟机安装vmtools坑

    win7镜像下载 要下带SP1这个记号的 xff0c 表示有service pack 1这个补丁的 一定一定记得 xff0c 不然vmtools装不上 补丁 vmtools安装期间有很多驱动安不上的话 xff0c 首先 xff0c 安装一个
  • Python学习第10天——GUI初步

    Python学习第10天 1 多个库2 所写的代码 1 多个库 图形开发界面的库 Tkinter xff1a Tkinter 模块 Tk 接口 是 Python 的标准 Tk GUI 工具包的接口 Tk 和 Tkinter 可以在大多数的
  • IO扩展芯片PCF8574的中断引脚的理解

    The PCF8574 device provides an open drain output INT that can be connected to the interrupt input of a microcontroller A
  • java中的字符转换为数字 十进制转为二进制

    java中的字符转整数 span class token comment 方式1 span span class token keyword char span c span class token operator 61 span spa

随机推荐

  • xshell登录 安卓手机

    局域网远程连接手机 通过ssh登录到手机 Termux安装Termux安装openssh启动sshd服务配置登录密钥方法1方法2 手机查看当前用户名手机查看当前ip电脑cmd ssh到手机电脑xshell连接到ssh手机 通过ssh登录到手
  • vscode插件之Linux相关插件

    Linux相关插件 1 Remote SSH 远程连接插件2 shell format 代码格式化工具3 shellman 代码语法提示4 Linux ansible 语法提示5 皮肤设置5 1 Dracula Official5 2 ta
  • linux-优化 PS1

    PS1 记录 span class token builtin class name export span span class token assign left variable span class token environmen
  • cmd 设置 路由 route

    查询路由 route print 删除单条路由 route delete span class token number 192 168 span 4 0 span class token punctuation span 网络地址 spa
  • samba 共享文件 Linux 为共享端 windows 为客户端

    1 安装samba yum span class token parameter variable y span span class token function install span samba 2 创建新用户 创建共享目录 配置s
  • dell 服务器 重装Linux系统

    dell 服务器 从U盘启动安装linux系统 工具 xff1a linux 系统 U盘启动盘 参考博客 ultraISO 制作 linux系统U盘启动盘 U盘启动盘接入dell服务器USB接口 尽量拆入 服务器后面的u口 1 开机启动de
  • LINUX安装openssl

    openssl 官网下载 https www openssl org source old 1 解压openssl包 xff1a span class token function tar span span class token par
  • 设置win服务器代理

    在Windows系统下 xff0c 可以使用以下命令设置代理地址 开启和关闭代理 xff1a 1 设置代理 netsh winhttp span class token builtin class name set span proxy m
  • docker frp搭建http代理

    docker compose yml version span class token string 34 2 34 span services frpc image alpine latest hostname frpc restart
  • Proxmox VE 套娃做pve集群实验ceph搭建及ha迁移 超融合

    纯粹是为了折腾 xff1a xff09 1 环境介绍 存储也可以说是超融合 OS xff1a Virtual Environment 6 2 4 pve231 主机 pve118 172 16 1 118 虚拟机1 pve119 172 1
  • docker-compose搭建lnmp环境

    使用命令创建文件和文件夹 span class token function mkdir span p span class token punctuation span php nginx span class token punctua
  • Qt Q_ENUM使用 枚举字符串互转

    目录 1 简述2 Q ENUM用法2 1 声明使用2 2 测试例子 3 用模板实现一个字符串枚举互转3 1代码3 2 用法示例 1 简述 数据库里用到了枚举的存储 xff0c 比如一个设备有两个状态 xff0c 保持数据库和代码的可读性 x
  • Update standard folders to current languages?选择Update Names重启后的Ubuntu 桌面空白 异常及解决办法

    在新安装完Ubuntu后 xff0c 如果想要得到中文的界面就需要进行系统环境的语言设置 xff0c 但是操作不当会让Ubuntu桌面的图标不再显示在桌面上 下面演示错误示范 xff1a 楼主安装完成Ubuntu后 xff0c 本来桌面上有
  • 1002 A+B for Polynomials (多项式相加)

    This time you are supposed to find A 43 B where A and B are two polynomials Input Specification Each input file contains
  • 使用Rust开发编译系统(C以及Rust编译的过程)

    C以及Rust编译的过程 主流的编译器GCCLLVM C语言编译过程LLVM编译过程将C源码转为LLVM IR将IR转化为BitCode将BitCode转为目标平台汇编码执行BitCode Rust编译过程下一步做什么 主流的编译器 GCC
  • pytesseract在代码中完成中文的识别

    pytesseract在代码中完成中文的识别 小tips text span class token operator 61 span pytesseract span class token punctuation span image
  • nohup命令输出到指定的文件, 而不是默认的nohup.out

    nohup命令输出到指定的文件 xff0c 而不是默认的nohup out nohup 默认输出到当前目录的nohup out xff0c 可以通过下面的命令来制定nohup输出位置 nohup some command amp gt NE
  • 51Nod 2582 最短区间 c/c++题解

    题目描述 现在给定一个整数s以及一个长度为n的整数数列a 0 a 1 a 2 a 3 a n 1 全为正数 xff0c 请你求出总和不小于s的连续子序列的长度的最小值 如果解不存在 xff0c 则输出0 输入 第一行 xff1a 两个整数
  • 《计算机网络—自顶向下方法》 第二章Wireshark实验1:HTTP

    1 基本HTTP GET response交互 我们开始探索HTTP xff0c 方法是下载一个非常简单的HTML文件 非常短 xff0c 并且不包含嵌入的对象 执行以下操作 xff1a 启动您的浏览器 启动Wireshark数据包嗅探器
  • 《计算机网络—自顶向下方法》 第二章Wireshark实验2:DNS

    实验 WireShark实验之DNS 描述 如书中第2 5节所述 xff0c 域名系统 DNS 将主机名转换为IP地址 xff0c 在互联网基础架构中发挥关键作用 在本实验中 xff0c 我们将仔细查看DNS在客户端的细节 回想一下 xff