Wireshark之Intro, HTTP, DNS

源码地址👇

moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES: 《计算机网络-自顶向下方法(原书第6版)》编程作业,Wireshark实验文档的翻译和解答。 (github.com)

目录

🌼Introduce

🎧前置

🎧过程

🎧课后问题

🌼HTTP

[💴GET / response交互](#💴GET / response交互)

💴HTTP消息格式

💴检索大型HTML文件(长文件)

💴检索具有嵌入对象的HTML文件

💴HTTP认证和安全性

🌼DNS

📱前置

📱过程

(一)nslookup

(二)ipconfig

[(三)WireShark 追踪 DNS](#(三)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

  1. 服务器上HTML文件的最近一次修改是什么时候?

别人的有,但是我的没有 Last-Modified👇


6. 服务器返回多少字节的内容到您的浏览器?

很奇怪,POST 浏览器发出的1000多字节,但是服务器返回的 0 bytes
7. 通过检查数据包内容窗口中的原始数据,你是否看到有协议头在数据包列表窗口中未显示? 如果是,请举一个例子

💴HTTP消息格式

前面没显示 GET,应该是没有清除Edge浏览器缓存的原因

先打开火狐,清楚最近历史记录,我的是第一次安装的

然后先WireShark开始抓包,接着火狐打开该网址

http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html

打开后,再次刷新,然后停止抓包👇

根据结果回答下列问题

  1. 检查第一个从您浏览器到服务器的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

解答

  1. 您的浏览器发送多少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的解释👇

  1. 第一行:IP地址10.252.121.239向178.79.137.164发出第一次GET请求,请求的资源是"8E_cover_small.jpg"
  2. 第二行:178.79.137.164服务器返回状态码302,表示请求的资源被重定向
  3. 第三行:IP地址10.252.121.239向202.116.36.202发出第二次GET请求,请求的资源是一个带有缓存路径的图片文件
  4. 第四行:202.116.36.202服务器成功返回了一张JPEG格式的图片,状态码为200
  5. 第五行:IP地址10.252.121.239向178.79.137.164发起第三次GET请求,请求的资源仍然是"8E_cover_small.jpg"
  6. 最后一行:178.79.137.164服务器返回状态码301,表示请求的资源被永久性重定向

第 3 次,打开提供的文件 http-ethereal-trace-4数据包

  1. 192.168.1.102向128.119.245.12请求HTML页面
  2. 128.119.245.12返回HTML页面给192.168.1.102,状态码为200 OK
  3. 192.168.1.102向165.193.123.218请求GIF图片
  4. 192.168.1.102向134.241.6.82请求JPG图片
  5. 165.193.123.218返回GIF图片给192.168.1.102,状态码为200 OK
  6. 134.241.6.82返回JPEG图片给192.168.1.102,状态码为200 Document follows

解答

  1. 您的浏览器发送了几个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解释👇

  1. 192.168.1.102向128.119.245.12请求一个受保护的HTML页面
  2. 128.119.245.12返回401错误状态码,要求进行身份验证
  3. 192.168.1.102再次向128.119.245.12请求相同的受保护的HTML页面
  4. 128.119.245.12返回状态码200 OK,即请求成功,返回HTML页面

虽然您的用户名和密码可能加密,但它们只是以一种称为Base64格式的格式进行编码。用户名和密码并没有加密!要确认这些,请访问

http://www.motobit.com/util/base64-decoder-encoder.asp

并输入base64编码的字符串 d2lyZXNoYXJrLXN0dWRlbnRz 并++进行解码++

选择 decode,可以看到 base64 字符串,被解码为 用户名👇

解答

  1. 对于您的浏览器的初始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,不清除缓存结果一般无法正常显示

bash 复制代码
C:\Users\1>ipconfig /flushdns

Windows IP Configuration

Successfully flushed the DNS Resolver Cache.

基本概念(20分钟过一遍)

DNS的基本概念是什么_云解析 DNS-阿里云帮助中心 (aliyun.com)

++(图片引自阿里云)++

本地域名服务器*++/ 没有缓存 /++* 前提下,DNS解析过程👇

当用户在Web浏览器中输入"example.com"时,以下是DNS查询的简单步骤:

  1. 用户在浏览器中输入"example.com"。
  2. 本地域名服务器开始进行递归查询。
  3. 本地域名服务器向根域名服务器查询。
  4. 根域名服务器告诉本地域名服务器顶级域名服务器(.com TLD)的IP地址。
  5. 本地域名服务器向顶级域名服务器(.com TLD)查询。
  6. .com TLD服务器告诉本地域名服务器example.com权威域名服务器的IP地址。
  7. 本地域名服务器向example.com权威域名服务器发送查询。
  8. example.com权威域名服务器告诉本地域名服务器查询的主机IP地址。
  9. 本地域名服务器将查询的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

bash 复制代码
nslookup -option1 -option2 host-to-find dns-server

nslookup解答

  1. 运行*nslookup*以获取一个亚洲的Web服务器的IP地址。该服务器的IP地址是什么?
bash 复制代码
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

  1. 运行*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

  1. Destination

  2. Type 为 "A",表示查询 IP 地址(IPv4);"AAAA",表示查询 IPv6 地址

没有包含Answers

  1. 找到DNS响应,Domain Name System点击,我这里有5条,包含类型和 IPv4 地址
  1. 根据 8. 得到的 addr👇

这里涉及 WireShark 过滤器

Wireshark过滤器写法总结 - willingtolove - 博客园 (cnblogs.com)

所以,是相对应的

  1. 只是部分需要发起新的DNS查询(未缓存 / 缓存过期 -- 才需要)

下一个链接👇

使用nslookup查询 www.mit.edu

  1. 目标和源端口都53,参考上面User Datagram Protocal

  2. 目标 IP 地址,是默认本地DNS的IP地址,参考 Internet Protocol Version 和 nslookup里Server下的Address

  3. 上面做过了

  4. 同上

现在输入下面两个网址,同时使用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 里打开,不然很多干扰

相关推荐
Static_Xiao8 小时前
计算机网络 8.*结构化布线
计算机网络
XF鸭11 小时前
计算机网络各层有哪些协议?
网络·计算机网络
尸僵打怪兽12 小时前
软考(中级-软件设计师)(0919)
java·c语言·数据库·计算机网络·软考·多媒体·软件设计师
FHKHH19 小时前
计算机网络第二章:作业 1: Web 服务器
服务器·前端·计算机网络
小堃学编程1 天前
计算机网络(七) —— https协议与网络安全证书
计算机网络·web安全·https
秋夫人1 天前
DoS、DDoS、DRDoS 攻击
计算机网络·ddos
小堃学编程1 天前
计算机网络(六) —— http协议详解
网络协议·计算机网络·http
长安初雪2 天前
计算机网络 第三章: 总线型共享式以太网_CSMA/CD协议
网络·计算机网络
CXDNW2 天前
【Linux篇】TCP/IP协议(笔记)
linux·网络·网络协议·tcp/ip·计算机网络