源码地址
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
结合这个视频做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协议的几个方面
(1)基本的GET/response交互(2)HTTP消息格式(3)检索大型HTML文件(4)检索具有嵌入对象的HTML文件(5)HTTP认证和安全性
过程
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. 通过检查数据包内容窗口中的原始数据,你是否看到有协议头在数据包列表窗口中未显示? 如果是,请举一个例子
前面没显示 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
表示当前这个页面的缓存还保存着,并且服务器没有修改,因此这个缓存还能拿来用,就不需要服务器再发一遍了
过程
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 网页的包,只能打开提供好的文件
过程
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消息交换的序列。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 字段,向网页提交密码
(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 -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命令图文教程,查看本机网络ip,dns刷新缓存 - 腾讯云开发者社区-腾讯云 (tencent.com)
清除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 里打开,不然很多干扰