源码地址👇
moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES: 《计算机网络-自顶向下方法(原书第6版)》编程作业,Wireshark实验文档的翻译和解答。 (github.com)
目录
🌼Introduce
🎧前置
🎧过程
🎧课后问题
🌼HTTP
💴GET / response交互
💴HTTP消息格式
💴检索大型HTML文件(长文件)
💴检索具有嵌入对象的HTML文件
💴HTTP认证和安全性
🌼DNS
📱前置
📱过程
(一)nslookup
(二)ipconfig
(三)WireShark 追踪 DNS
🌼Introduce
结合这个视频做WireShark实验👇
2.WireShark抓包入门操作_哔哩哔哩_bilibili
Introduce的博客
Wireshark实验——入门 - 乌漆WhiteMoon - 博客园 (cnblogs.com)
新手全流程Wireshark博客(建议跟一遍)
wireshark抓包新手使用教程 - jack_Meng - 博客园 (cnblogs.com)
🎧前置
首先,WireShark 是一个使用计算机中 packet capture(pcap) 的 packet analyzer,是免费的网络协议分析器,可在 Windows,Mac 和 Linux / Unix 计算机上运行
可以运行在使用 以太网,串行(PPP 和 SLIP),802,11无线局域网 和 许多其他链路层技术的计算机上
packet sniffer(分组嗅探器)
观察执行协议实体之间交换信息的基本工具
(1)sniffer 计算机发送 / 接收的消息
(2)存储并捕获消息中的协议字段内容
(3)接收的是机器的应用程序和协议,发送 / 接收分组的 “副本”
👆上图是 packet sniffer 的结构,右侧为应用层,传输层,网络层,链路层,物理层的协议
(当前为 Internet 协议)和应用程序(比如Web浏览器 或 ftp客户端)
虚线框的 packet sniffer 包含 2 部分:
(1) packet capture(分组捕获库)
接收链路层的副本
较高层协议(HTTP,FTP,DNS;TCP,UDP;IP...)交换的消息最终被封装在(通过物理介质传输的)链路层中,例如以太网电缆。
图中,假设物理介质是以太网,那么所有上层协议最终被封装在以太网帧中
捕获所有链路层帧,即可获得所有协议和应用程序 发送 / 接收 的消息
(2) packet analyzer(分组分析器)
显示协议消息中所有字段的内容
为了做到这一点,packet analyzer 需要 “理解” 协议交换所有消息的结构
举个例子👇
假设在 HTTP 协议交换消息显示各种字段,packet analyzer
了解以太网帧的格式 --> 识别以太网帧的 IP 数据报
理解 IP 数据报格式 --> 提取 IP 数据包里的 TCP 段
理解 TCP 段结构 --> 提取 TCP 段中包含的 HTTP 消息
理解 HTTP 协议 --> 知道 HTTP 消息第一部分包含字符串 "GET", "POST", "HEAD"
🎧过程
教程:3.WireShark过滤器使用_哔哩哔哩_bilibili
先cmd,输入 ipconfig,找到已连接的网络,而不是 disconnection
我连接的是学校的 wifi,所以选择 WLAN,开始抓包后,访问网址gaia.cs.umass.edu/wireshark-labs/INTRO-wireshark-file1.html
稍等一会,先让它抓个30秒,然后暂停,进行 http 的 filter,得到👇
其他尝试👇
但是,并没有看到 HTTP GET 的消息,只有POST,估计这个网站我GET不到
但是抓百度,是可以直接抓到的
或者先开始抓包,再在 cmd Ping
🎧课后问题
第一个实验的目的是,介绍 WireShark,安装,启动,运动
(1)3种不同的协议
HTTP,TCP,OICQ
(2)两次POST时间差
(3)源IP 和目标IP
Source 和 Destination可以看
🌼HTTP
在这个实验中,我们会探索HTTP协议的几个方面
(1)基本的GET/response交互(2)HTTP消息格式(3)检索大型HTML文件(4)检索具有嵌入对象的HTML文件(5)HTTP认证和安全性
💴GET / response交互
过程
gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file1.html
destination没啥问题,但是HTTP那里,没有出现GET,只有POST
上面的结果也可能是对的,因为不同操作系统 或 不同WireShark版本,有所区别
然后我从压缩的网址, http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip
解压到本地并在WireShark打开 http-ethereal-trace-1
才得到了GET
不是没有GET字段,而是自顶向下提供的网站,确实抓不到,我尝试打开其他网站,有些有GET,有些只有POST👇
解答
1. 您的浏览器是否运行HTTP版本1.0或1.1?服务器运行什么版本的HTTP?
浏览器 1.1👆
服务器 1.1👆
2. 您的浏览器会从接服务器接受哪种语言(如果有的话)?
但是开发者工具里,并没有看到 Accept-Language,也许不是每个请求都有
3. 您的计算机的IP地址是什么? gaia.cs.umass.edu服务器地址呢?
我的计算机是 10.252.120.241,服务器地址是 110.249.194.68
4. 服务器返回到浏览器的状态代码是什么?
200 OK
5. 服务器上HTML文件的最近一次修改是什么时候?
别人的有,但是我的没有 Last-Modified👇
6. 服务器返回多少字节的内容到您的浏览器?
很奇怪,POST 浏览器发出的1000多字节,但是服务器返回的 0 bytes
7. 通过检查数据包内容窗口中的原始数据,你是否看到有协议头在数据包列表窗口中未显示? 如果是,请举一个例子
💴HTTP消息格式
前面没显示 GET,应该是没有清除Edge浏览器缓存的原因
先打开火狐,清楚最近历史记录,我的是第一次安装的
然后先WireShark开始抓包,接着火狐打开该网址
http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html
打开后,再次刷新,然后停止抓包👇
根据结果回答下列问题
8. 检查第一个从您浏览器到服务器的HTTP GET请求的内容。您在HTTP GET中看到了“IF-MODIFIED-SINCE”行吗?
没有
9. 检查服务器响应的内容。服务器是否显式返回文件的内容? 你是怎么知道的?
返回了 HTML 文本
10. 现在,检查第二个HTTP GET请求的内容。 您在HTTP GET中看到了“IF-MODIFIED-SINCE:”行吗? 如果是,“IF-MODIFIED-SINCE:”头后面包含哪些信息?
(1)If-Modified-Since是标准的HTTP请求头标签,在发送HTTP请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去
(2)这个头部告诉服务器,客户端认为资源在"Tue, 21 Nov 2023 06:59:01 GMT"之后进行了修改。服务器将使用这个信息来判断,是否返回更新后的资源或者返回一个状态码304(Not Modified)
(3)304 表示客户端缓存的资源仍然有效,无需重新传输
(4)这样的条件性请求可以减少不必要的数据传输,节省网络带宽和服务器资源
11. 针对第二个HTTP GET,从服务器响应的HTTP状态码和短语是什么?服务器是否明确地返回文件的内容?请解释👇
304 Not Modified
表示当前这个页面的缓存还保存着,并且服务器没有修改,因此这个缓存还能拿来用,就不需要服务器再发一遍了
💴检索大型HTML文件(长文件)
过程
Historical Documents:THE BILL OF RIGHTS
清除缓存 -- 抓包 -- 打开网址 -- 停止抓包
清除缓存👆清除历史记录,而且清除完历史,缓存要连续清除2次,等下打开网址,要在原页面打开👇
但是我连接到的不是预定的页面....WireShark也没啥问题,不知道为啥,只能选择打开文件👇http-ethereal-trace-3
解答
12. 您的浏览器发送多少HTTP GET请求消息?哪个数据包包含了美国权利法案的消息?
一个 555 GET
200 OK 的数据包,包含了 4500 bytes 的信息
13. 哪个数据包包含响应HTTP GET请求的状态码和短语?
HTTP/1.1 200 OK
14. 响应中的状态码和短语是什么?
200 OK,表示请求成功,信息在返回的报文里
15. 需要多少包含数据的TCP段来执行单个HTTP响应和权利法案文本?
根据别人的答案,需要5个,但是我抓不到这个 HTML 网页的包,只能打开提供好的文件
💴检索具有嵌入对象的HTML文件
过程
http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file4.html
您的浏览器应显示包含两个图像的短HTML文件。这两个图像在基本HTML文件中被引用。也就是说,图像本身不包含在HTML文件中;相反,图像的URL包含在已下载的HTML文件中
第一次,只收到了一个 .jpg
第二次,打开后,刷新,多等了1分钟👇
GPT的解释👇
- 第一行:IP地址10.252.121.239向178.79.137.164发出第一次GET请求,请求的资源是"8E_cover_small.jpg"
- 第二行:178.79.137.164服务器返回状态码302,表示请求的资源被重定向
- 第三行:IP地址10.252.121.239向202.116.36.202发出第二次GET请求,请求的资源是一个带有缓存路径的图片文件
- 第四行:202.116.36.202服务器成功返回了一张JPEG格式的图片,状态码为200
- 第五行:IP地址10.252.121.239向178.79.137.164发起第三次GET请求,请求的资源仍然是"8E_cover_small.jpg"
- 最后一行:178.79.137.164服务器返回状态码301,表示请求的资源被永久性重定向
第 3 次,打开提供的文件 http-ethereal-trace-4数据包
- 192.168.1.102向128.119.245.12请求HTML页面
- 128.119.245.12返回HTML页面给192.168.1.102,状态码为200 OK
- 192.168.1.102向165.193.123.218请求GIF图片
- 192.168.1.102向134.241.6.82请求JPG图片
- 165.193.123.218返回GIF图片给192.168.1.102,状态码为200 OK
- 134.241.6.82返回JPEG图片给192.168.1.102,状态码为200 Document follows
解答
16. 您的浏览器发送了几个HTTP GET请求消息? 这些GET请求发送到哪个IP地址?
3个,三个不同 IP 地址
17. 浏览器从两个网站串行还是并行下载了两张图片?请说明。
先解释下概念👇
串行:逐个执行任务,一个任务完成后才能执行下一个,顺序执行,适用于单处理器系统
并行:同时执行多个任务,并发执行,缩短总体执行时间,提高效率,适用于多处理器系统或分布式系统
根据第3,4行,两行 GET 的时间戳,相差了 0.003 秒(3毫秒),而通常串行时间间隔在几十到几百毫秒之间,所以是并行
💴HTTP认证和安全性
每次开始前清除一下缓存👇
再介绍一个概念
过程
访问受密码保护的网站,并检查网站的HTTP消息交换的序列。URL http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wireshark-file5.html 是受密码保护的。用户名是“wireshark-students”(不包含引号),密码是“network”(再次不包含引号)
然而,我一个 HTTP 的包都没抓到,只能打开 http-ethereal-trace-5 数据包👇
GPT解释👇
- 192.168.1.102向128.119.245.12请求一个受保护的HTML页面
- 128.119.245.12返回401错误状态码,要求进行身份验证
- 192.168.1.102再次向128.119.245.12请求相同的受保护的HTML页面
- 128.119.245.12返回状态码200 OK,即请求成功,返回HTML页面
虽然您的用户名和密码可能加密,但它们只是以一种称为Base64格式的格式进行编码。用户名和密码并没有加密!要确认这些,请访问
http://www.motobit.com/util/base64-decoder-encoder.asp
并输入base64编码的字符串 d2lyZXNoYXJrLXN0dWRlbnRz 并进行解码
选择 decode,可以看到 base64 字符串,被解码为 用户名👇
解答
18. 对于您的浏览器的初始HTTP GET消息,服务器响应(状态码和短语)是什么响应?
401 Authorization Required,该状态码表示用户没有访问权限,需要进行身份认证
19. 当您的浏览器第二次发送HTTP GET消息时,HTTP GET消息中包含哪些新字段?
第一次
第二次
多了 Authorization 字段,向网页提交密码
🌼DNS
📱前置
(1)DNS 的全称是 Domain Name System(域名系统) 。它是一个用于将域名解析成 IP 地址的分布式数据库系统
(2)客户端发起 DNS 查询请求后,DNS 服务器会返回一个 IP 地址,从而使得客户端能够连接到所请求的网站或服务
DNS用于将域名解析为对应的IP地址,而后续的数据包则根据DNS提供的IP地址进行通信
清除 DNS 缓存
windows 用 ipconfig /flushdns,不清除缓存结果一般无法正常显示
C:\Users\1>ipconfig /flushdns
Windows IP Configuration
Successfully flushed the DNS Resolver Cache.
基本概念(20分钟过一遍)
DNS的基本概念是什么_云解析 DNS-阿里云帮助中心 (aliyun.com)
(图片引自阿里云)
本地域名服务器/ 没有缓存 /前提下,DNS解析过程👇
当用户在Web浏览器中输入"example.com"时,以下是DNS查询的简单步骤:
- 用户在浏览器中输入"example.com"。
- 本地域名服务器开始进行递归查询。
- 本地域名服务器向根域名服务器查询。
- 根域名服务器告诉本地域名服务器顶级域名服务器(.com TLD)的IP地址。
- 本地域名服务器向顶级域名服务器(.com TLD)查询。
- .com TLD服务器告诉本地域名服务器example.com权威域名服务器的IP地址。
- 本地域名服务器向example.com权威域名服务器发送查询。
- example.com权威域名服务器告诉本地域名服务器查询的主机IP地址。
- 本地域名服务器将查询的IP地址响应给Web浏览器。
一旦得到了example.com的IP地址,浏览器可以发出对该IP地址的HTTP请求,并从该IP地址处的Web服务器获取要显示在浏览器中的网页
DNS术语
递归查询:当你在浏览器中输入网址时,DNS服务器会帮助你找到对应的IP地址。递归查询是指DNS服务器从别的服务器上获取准确的查询结果,然后将结果返回给你
迭代查询:当DNS服务器无法直接回答你的查询,它会告诉你去问另一个DNS服务器。这个过程可能会进行多次,直到找到查询结果为止
DNS缓存:DNS服务器会将解析结果存储在靠近你的位置,这样下次查询相同的网址时可以更快地获取结果,减少了递归查询的时间
TTL(Time To Leave):这是一个时间值,告诉DNS服务器可以将解析结果缓存多长时间。当缓存时间到期后,DNS服务器会删除该解析记录,需要重新进行查询
IPV4、IPV6双栈技术:在一个系统中同时使用IPv4和IPv6协议,以便能够连接到不同类型的网络(双栈 Dual IP Stack)
TLD服务器:顶级域名服务器(Top-level domains Server),负责管理顶级域名(如.com、.net等)的IP地址
DNS Resolver:也称为本地域名服务器,是处理你发出的初始DNS请求的第一站。它可以是由你的互联网服务提供商(ISP)分配的DNS服务器,也可以是像Google的8.8.8.8这样的公共DNS服务器
根域名服务器:当本地域名服务器无法找到查询结果时,它会向根域名服务器进行查询,并获取顶级域名服务器的IP地址
DNS记录和消息
What are DNS records? | Cloudflare (cloudflare-cn.com)
DNS报文格式解析(非常详细) (biancheng.net)
nslookup
nslookup命令详解:nslookup是一种网络管理命令行工具 - 习久性成 - 博客园 (cnblogs.com)
📱过程
DNS实验中一个服务器已经不在使用,且部分现象无法解释,速通~
(一)nslookup
nslookup -option1 -option2 host-to-find dns-server
nslookup解答
1. 运行*nslookup*以获取一个亚洲的Web服务器的IP地址。该服务器的IP地址是什么?
C:\Users\1>nslookup www.google.com
Server: UnKnown
Address: 202.116.32.254
Non-authoritative answer:
Name: www.google.com
Addresses: 2a03:2880:f11c:8083:face:b00c:0:25de
142.251.42.228
142.251.42.228
2. 运行*nslookup*来确定一个欧洲的大学的权威DNS服务器。
解释
(1)-type=NS
是一个选项,表示查询的类型是 NS(Name Server)记录
(2)nslookup
命令后加上-type=NS
选项,那么查询结果会返回与所查询域名相关的权威DNS服务器的信息。这些信息包括权威DNS服务器的域名和对应的IP地址(3)如果不加
-type=NS
选项,则默认的查询类型是 A 记录,即查询域名对应的IPv4地址(不同的查询类型,会返回不同的信息)
3. 运行*nslookup*,使用问题2中一个已获得的DNS服务器,来查询Yahoo!邮箱的邮件服务器。它的IP地址是什么?
(二)ipconfig
ipconfig命令图文教程,查看本机网络ip,dns刷新缓存 - 腾讯云开发者社区-腾讯云 (tencent.com)
(三)WireShark 追踪 DNS
清除DNS缓存,清除FIreFox浏览器记录,打开WireShark抓包WLAN,浏览器输入
http://www.ietf.org,停止抓包
ipconfig查询WLAN的IPv4地址
WireShark查询👇
问题解答
点击第一个,下方第一行 Frame 的最后
4. DNS查询和响应消息,通过UDP发送
5. 下方 User Datagram Protocal,显示 port: 53
6. Destination
7. Type 为 “A”,表示查询 IP 地址(IPv4);“AAAA”,表示查询 IPv6 地址
没有包含Answers
8. 找到DNS响应,Domain Name System点击,我这里有5条,包含类型和 IPv4 地址
9. 根据 8. 得到的 addr👇
这里涉及 WireShark 过滤器
Wireshark过滤器写法总结 - willingtolove - 博客园 (cnblogs.com)
所以,是相对应的
10. 只是部分需要发起新的DNS查询(未缓存 / 缓存过期 -- 才需要)
下一个链接👇
使用nslookup查询 www.mit.edu
11. 目标和源端口都53,参考上面User Datagram Protocal
12. 目标 IP 地址,是默认本地DNS的IP地址,参考 Internet Protocol Version 和 nslookup里Server下的Address
13. 上面做过了
14. 同上
现在输入下面两个网址,同时使用Wireshark和cmd ipconfig,重复上面实验
(1)nslookup -type=NS mit.edu
(2)nslookup www.aiit.or.kr bitsy.mit.edu(这个DNS服务器,好像有点问题)
That's the end ~
其实,还是建议用 源码提供的 wireshark 数据包,在 wireshark 里打开,不然很多干扰