目录
- Introduction
- Background
- TCP/IP Network Stack
- Application Layer
- Transport Layer
- Internet Layer
- Link Layer
- Packet Sniffer
- Getting Wireshark
- Starting Wireshark
- Capturing Packets
- Test Run
- Questions for the Lab
Introduction
实验的第一部分介绍数据包嗅探器 Wireshark。 Wireshark 是一个免费的开源网络协议分析器。它用于网络故障排除和通信协议分析。 Wireshark 实时捕获网络数据包并以人类可读的格式显示它们。它提供了许多高级功能,包括实时捕获和离线分析、三窗格数据包浏览器、分析着色规则。本文档使用Wireshark进行实验,内容包括Wireshark的安装、抓包和协议分析。
Background
TCP/IP Network Stack
在《计算机网络概论》课程中,对TCP/IP网络栈进行了介绍和研究。本背景部分简要解释了 TCP/IP 网络堆栈的概念,以帮助您更好地理解实验。 TCP/IP 是 Internet 服务最常用的网络模型。由于其最重要的协议传输控制协议 (TCP) 和互联网协议 (IP) 是该标准中定义的第一个网络协议,因此被命名为 TCP/IP。然而,它包含多个层,包括应用层、传输层、网络层和数据链路层。
Application Layer
应用层包括大多数应用程序用于提供用户服务的协议。应用层协议的示例有超文本传输协议 (HTTP)、安全外壳 (SSH)、文件传输协议 (FTP) 和简单邮件传输协议 (SMTP)。
Transport Layer
传输层建立进程到进程的连接,并提供独立于底层用户数据的端到端服务。为了实现进程间通信,协议引入了端口的概念。传输层协议的示例是传输控制协议(TCP)和用户数据报协议(UDP)。 TCP提供流量控制、连接建立和数据的可靠传输,而UDP是无连接传输模型。
Internet Layer
互联网层负责跨网络发送数据包。它有两个功能:1)使用IP寻址系统(IPv4和IPv6)进行主机识别; 2) 数据包从源到目的地的路由。互联网层协议的示例有互联网协议 (IP)、互联网控制消息协议 (ICMP) 和地址解析协议 (ARP)。
Link Layer
链路层定义了本地网络链路范围内的组网方式。它用于在同一链路上的两台主机之间移动数据包。链路层协议的一个常见示例是以太网。
Packet Sniffer
数据包嗅探器是观察计算机中网络数据包交换的基本工具。顾名思义,数据包嗅探器捕获(“嗅探”)您的计算机发送/接收的数据包;它通常还会存储和/或显示这些捕获的数据包中各种协议字段的内容。数据包嗅探器本身是被动的。它观察计算机上运行的应用程序和协议发送和接收的消息,但从不发送数据包本身。
图3显示了数据包嗅探器的结构。图 3 右侧是通常在计算机上运行的协议(在本例中为 Internet 协议)和应用程序(例如 Web 浏览器或 ftp 客户端)。图 3 中虚线矩形内所示的数据包嗅探器是计算机中常用软件的附加功能,由两部分组成。数据包捕获库接收从计算机发送或接收的每个链路层帧的副本。由更高层协议(例如 HTTP、FTP、TCP、UDP、DNS 或 IP)交换的消息最终都封装在链路层帧中,并通过以太网电缆等物理介质进行传输。在图1中,假设的物理介质是以太网,因此所有上层协议最终都封装在以太网帧中。因此,捕获所有链路层帧使您可以访问计算机中执行的所有协议和应用程序发送/接收的所有消息。
数据包嗅探器的第二个组件是数据包分析器,它显示协议消息中所有字段的内容。为此,数据包分析器必须“理解”协议交换的所有消息的结构。例如,假设我们有兴趣显示图 3 中 HTTP 协议交换的消息中的各个字段。数据包分析器了解以太网帧的格式,因此可以识别以太网帧内的 IP 数据报。它还了解 IP 数据报格式,以便能够提取 IP 数据报中的 TCP 段。最后,它了解 TCP 段结构,因此可以提取 TCP 段中包含的 HTTP 消息。最后,它理解 HTTP 协议,因此知道 HTTP 消息的第一个字节将包含字符串“GET”、“POST”或“HEAD”。
我们将在这些实验中使用 Wireshark 数据包嗅探器 [http://www.wireshark.org/],使我们能够显示协议栈不同级别的协议发送/接收的消息内容。 (从技术上讲,Wireshark 是一个数据包分析器,它使用计算机中的数据包捕获库)。 Wireshark 是一款免费的网络协议分析器,可在 Windows、Linux/Unix 和 Mac 计算机上运行。
Getting Wireshark
Kai Linux 已安装 Wireshark。您只需启动 Kali Linux VM 并在其中打开 Wireshark。 Wireshark 也可以从这里下载:https://www.wireshark.org/download.html
Starting Wireshark
当您运行Wireshark程序时,Wireshark图形用户界面将如图5所示。目前,该程序未捕获数据包。
然后,您需要选择一个接口。如果您在笔记本电脑上运行 Wireshark,则需要选择 WiFi 接口。如果您在桌面上,则需要选择正在使用的以太网接口。请注意,可能有多个接口。一般来说,您可以选择任何接口,但这并不意味着流量将流经该接口。这显示您的计算机与网络的网络接口(即物理连接)。附图6是从我的电脑上截取的。
选择接口后,单击“start”即可抓包,如图7所示。
Wireshark 界面有五个主要组件:
命令菜单是位于窗口顶部的标准下拉菜单。我们现在感兴趣的是“文件”和“捕获”菜单。文件菜单允许您保存捕获的数据包数据或打开包含先前捕获的数据包数据的文件,并退出 Wireshark 应用程序。捕获菜单允许您开始数据包捕获。
数据包列表窗口显示捕获的每个数据包的一行摘要,包括数据包编号(由 Wireshark 分配;这不是任何协议标头中包含的数据包编号)、捕获数据包的时间、数据包的来源数据包中包含的目标地址、协议类型和协议特定信息。通过单击列名称,可以根据任何这些类别对数据包列表进行排序。协议类型字段列出了发送或接收该数据包的最高级别协议,即该数据包的源或最终接收器的协议。
数据包标头详细信息窗口提供有关在数据包列表窗口中选择(突出显示)的数据包的详细信息。 (要在数据包列表窗口中选择数据包,请将光标放在数据包列表窗口中数据包的一行摘要上,然后单击鼠标左键。)。这些详细信息包括有关包含此数据包的以太网帧和 IP 数据报的信息。通过单击数据包详细信息窗口中以太网帧或 IP 数据报行左侧的向右或向下箭头,可以扩大或最小化显示的以太网和 IP 层详细信息量。如果数据包已通过 TCP 或 UDP 承载,则还将显示 TCP 或 UDP 详细信息,并且可以类似地展开或最小化。最后,还提供了有关发送或接收此数据包的最高级别协议的详细信息。
数据包内容窗口以 ASCII 和十六进制格式显示捕获帧的全部内容。
Wireshark 图形用户界面的顶部是数据包显示过滤器字段,可以在其中输入协议名称或其他信息,以便过滤数据包列表窗口中显示的信息(以及数据包标头和数据包头)。 - 内容窗口)。在下面的示例中,我们将使用数据包显示过滤器字段让 Wireshark 隐藏(不显示)除与 HTTP 消息对应的数据包之外的数据包。
Capturing Packets
下载并安装Wireshark后,您可以启动它并单击“接口列表”下的接口名称以开始在该接口上捕获数据包。例如,如果您想捕获无线网络上的流量,请单击您的无线接口。
Test Run
执行以下步骤:
-
启动Wireshark程序(选择接口并按开始抓包)。
-
启动您最喜欢的浏览器(Kali Linux 中的 ceweasel)。
-
在浏览器中,输入 www.wayne.edu 转至 Wayne State 主页。
-
浏览器显示 http://www.wayne.edu 页面后,通过在 Wireshark 捕获窗口中选择停止来停止 Wireshark 数据包捕获。这将导致 Wireshark 捕获窗口消失,并且主 Wireshark 窗口显示自开始数据包捕获以来捕获的所有数据包,请参见下图:
-
颜色编码:您可能会看到以绿色、蓝色和黑色突出显示的数据包。 Wireshark 使用颜色来帮助您一目了然地识别流量类型。默认情况下,绿色是 TCP 流量,深蓝色是 DNS 流量,浅蓝色是 UDP 流量,黑色标识有问题的 TCP 数据包 — 例如,它们可能已无序传送。
-
您现在拥有实时数据包数据,其中包含您的计算机和其他网络实体之间交换的所有协议消息!但是,您会注意到 HTTP 消息并未清晰显示,因为数据包捕获中还包含许多其他数据包。尽管您执行的唯一操作是打开浏览器,但您的计算机中还有许多其他程序在后台通过网络进行通信。为了过滤我们想要关注的连接,我们必须使用 Wireshark 的过滤功能,在过滤字段中输入“http”,如下所示:
请注意,我们现在仅查看 HTTP 协议的数据包。然而,我们仍然没有想要关注的确切通信,因为使用 HTTP 作为过滤器的描述性不足以让我们找到与 http://www.wayne.edu 的连接。如果我们想捕获正确的数据包集,我们需要更加精确。 -
为了在Wireshark中进一步过滤数据包,我们需要使用更精确的过滤器。通过设置 http.hostsustech,我们将视图限制为以 www.wayne.edu 网站作为 http 主机的数据包。请注意,我们需要两个等号来执行匹配“”,而不仅仅是一个。请参阅下面的屏幕截图:
-
现在,我们可以尝试另一个协议。我们以域名系统(DNS)协议为例。
-
现在让我们尝试通过跟踪其中一个对话(也称为网络流)来找出这些数据包包含什么内容,选择其中一个数据包并按鼠标右键(如果您使用的是 Mac,请使用命令按钮并单击),您应该会看到类似于以下屏幕的内容:
单击“关注 UDP 流”,然后您将看到以下屏幕。
-
如果我们关闭此窗口并将过滤器更改回“http.host==www.wayne.edu”,然后跟踪与该过滤器匹配的数据包列表中的数据包,我们应该得到类似于以下屏幕的内容。请注意,我们这次单击“Follow TCP Stream”。
Questions for the Lab
- 仔细阅读实验说明并完成上述所有任务。
- 如果某个数据包以黑色突出显示,这对该数据包意味着什么? 【在Wireshark中,黑色高亮的包通常表示该包有问题,例如它们可能已经乱序到达。】
- 列出所有传出http流量的过滤器命令是什么? 【用于列出所有出站HTTP流量的过滤器命令是 http.request.method == “GET” 或者更一般的 http。】
- 为什么DNS使用Follow UDP Stream,而HTTP使用Follow TCP Stream? 【DNS使用UDP作为其传输层协议,而HTTP通常使用TCP。因此,Wireshark中DNS流量跟踪使用“Follow UDP Stream”,而HTTP流量跟踪使用“Follow TCP Stream”,因为它们分别在UDP和TCP协议上运行。】
- 使用Wireshark捕获FTP密码。 Kali Linux VM 上安装了一个 FTP 服务器。您需要使用终端登录服务器并使用Wireshark捕获密码。 FTP 服务器的用户名是 【见校内文件】,密码是【见校内文件】。当 Wireshark 运行时,您将使用用户名和密码登录 FTP 服务器。请注意,FTP 服务器安装在本地主机上,请确保选择正确的接口进行捕获。你需要向我解释一下你是如何找到密码的以及密码包的屏幕截图。玩得开心!