> For the complete documentation index, see [llms.txt](https://fnil.gitbook.io/computer-networking/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fnil.gitbook.io/computer-networking/shi-yan/lab-1-shi-yong-wireshark-guan-cha-fen-zu.md).

# Lab 1：使用Wireshark观察分组

2026\~2027年秋季学期

## 一、实验目的

1. 掌握使用Wireshark捕获分组、分析分组内容的方法；
2. 观察网络协议运行情况，对分组的首部、载荷等基本结构形成直观认识；
3. 通过观察不同协议的分组，加深对网络协议层次模型的理解；
4. 体会重要信息在网络中明文传输的危险性，增强网络安全意识。

## 二、实验原理

网络嗅探器（Network Sniffer）是一种软件或硬件工具，用于捕获、分析和监视通过计算机网络传输的分组。网络嗅探器可以被用来监视网络流量、分析网络通信、识别潜在的安全问题，以及进行网络故障排除。嗅探器被动工作，它本身不发送分组，也没有分组明确以嗅探器为目的地。

<figure><img src="https://4116762772-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiTMk5wMcvy5JOiK7dkqh%2Fuploads%2FJptSUeWvD6RmXgFddVZV%2Fimage.png?alt=media&amp;token=1cdf3e9d-76b7-4639-b4d9-1421a119f60f" alt=""><figcaption><p>网络嗅探器结构</p></figcaption></figure>

上图展示了网络嗅探器的结构。右侧是通常在计算机上运行的协议（本例中为互联网协议）和应用程序（如网络浏览器或电子邮件客户端）。 虚线矩形内所示的网络嗅探器由两部分组成。第一部分是**分组捕获库**，它接收计算机通过给定接口（链路层，如以太网或 WiFi）发送或接收的每个链路层帧的副本。由于HTTP、FTP、TCP、UDP、DNS 或 IP 等高层协议交换的信息最终都封装在链路层帧中，通过以太网电缆或 802.11 WiFi 无线电等物理介质传输。 因此，通过捕获所有链路层帧，就可以获得计算机中执行的所有协议和应用程序通过受监控链路发送/接收的所有信息。

分组嗅探器的第二个组成部分是**分组分析器**，它可以显示协议信息中所有字段的内容。 为此，分组分析器必须 “理解 ”协议交换的所有报文结构。 例如，假设我们想显示上图中 HTTP 协议交换的报文中的各个字段。分组分析仪了解以太网帧的格式，因此可以识别以太网帧中的 IP 数据报。 它还了解 IP 数据报格式，因此可以提取 IP 数据报中的 TCP 段。此外，它了解 TCP 报文段结构，因此可以提取 TCP 报文段中包含的 HTTP 报文。 最后，它还了解 HTTP 协议，例如，它知道 HTTP 报文的第一个字节将包含字符串 “GET”、“POST ”或 “HEAD”。关于HTTP方面的知识，可以参考：<https://www.runoob.com/http/http-messages.html>

在本学期的课程中，我们使用的网络嗅探器是Wireshark，它的具体安装和使用说明请见 [附录A：Wireshark 教程](/computer-networking/fu-lu/fu-lu-awireshark-jiao-cheng.md)。如上文所述，网络嗅探器通过捕获链路层帧来工作；但是根据wireshark的命名习惯，我们使用“分组”这个不那么精确的术语来统称链路层帧、网络层数据报、传输层报文段和应用层报文，并将wireshark的工作笼统称为捕获分组。

## 三、实验任务

打开Wireshark分组捕获，本次实验使用 httpbin.org 这个专门用于HTTP请求/响应测试的公开服务（同时支持HTTP和HTTPS，且长期保持对纯HTTP访问的支持，不会被强制跳转），请确保浏览器地址栏中输入的是 http\:// 而不是 https\://。注意：如果第一次访问时操作失误，可能会受到浏览器缓存影响，需要先关闭该网页、清除浏览器缓存后重新操作。回答以下问题：

1. 访问 <http://httpbin.org/get，请列出捕获到的5种不同类型的协议。（提示：一次完整的访问通常会包含DNS、TCP、HTTP，以及ARP或ICMPv6等链路层/网络层协议，可以在过滤器为空的情况下观察Protocol列。）>
2. 用显示过滤器 `http` 过滤出所有HTTP消息，从发出第一条HTTP GET请求到收到对应的HTTP 200 OK响应用了多长时间？（`/get` 接口会直接返回200 OK，不会发生到HTTPS的重定向，可以在同一条TCP流里找到完整的对应关系。）默认情况下，数据包列表窗口中"Time"列的值是自Wireshark捕获开始经过的秒数，也可以点击菜单栏"视图-时间显示格式"切换到其他格式。
3. httpbin.org服务器的IP地址是什么？你的计算机发送HTTP GET请求时的IP地址是什么？
4. 找到任意一个HTTP包，发出HTTP请求的网络浏览器是什么？你可以在分组详细信息中的Hypertext Transfer Protocol部分寻找"User-Agent"字段，或者追踪流的页面中寻找“User-Agent"字段。
5. 找到任意一个TCP包，源端口号和目的端口号各自是什么？你可以发现，分组详细信息中的Transmission Control Protocol (TCP) 部分列出了Src Port和Dst Port。
6. 访问 <http://httpbin.org/image/jpeg（该地址会直接返回一张体积较大的JPEG图片），找到该HTTP响应对应的分组，这个分组是由多少个TCP报文段组合而成的？由于图片体积通常超过单个TCP报文段能承载的大小（约1460字节），会被拆分成多个TCP段传输，在分组详细信息中会有"\\[x> Reassembled TCP Segments]"提示。
7. 针对上一题中的图片响应分组，通过"显示分组字节"（Show Packet Bytes），并将"Show as"切换为"Image"，直接在Wireshark中查看该图片，并与浏览器中访问该地址时看到的图片进行核对。
8. （确保你已经为以上问题保存了必要的截图后）重新开启分组捕获，访问 <http://httpbin.org/forms/post，在页面表单中任意填写一些内容并提交。在捕获到的分组里用> `http` 过滤器找到对应的POST请求，展开HTTP层，观察Content-Type（通常为 `application/x-www-form-urlencoded`），并在请求体中找到刚才填写的内容，体会HTTP如何通过POST方法发送数据——数据不再出现在URL中，但由于仍是明文传输，Wireshark依然能直接读出请求体内容。

注意：如果你第一次访问指定网页时操作失误，可能会受到浏览器缓存影响。你需要先关闭该网页、清除浏览器缓存后再重新操作。

9. 重新开启分组捕获，访问 <http://gaia.cs.umass.edu/wireshark-labs/protected\\_pages/HTTP-wireshark-file5.html，输入用户名> wireshark-students，密码 network。在抓取的分组中找到输入的用户名和密码（提示：传输使用了Base64编码）。
10. 同9，将地址中的http改为https（<https://gaia.cs.umass.edu/wireshark-labs/protected\\_pages/HTTP-wireshark-file5.html），还能否通过捕获分组获得密码？如果不能获得密码，原因是什么？>
