%# -*- coding: utf-8-unix -*- \section{Wireshark软件使用与ARP协议分析} \label{sec:c:wireshark:s:arp} \subsection{实验目的} \label{subsec:c:wireshark:s:arp_object} 学习Wireshark的基本操作, 抓取和分析有线局域网的数据包; 掌握以太网MAC帧的基本结构, 掌握ARP协议的特点及工作过程。 \subsection{实验内容} \label{subsec:c:wireshark:s:arp_content} 使用Wireshark抓取局域网的数据包并进行分析: \begin{enumerate} \item \textbf{学习Wireshark基本操作:} 重点掌握捕获过滤器和显示过滤器。 \item \textbf{观察MAC地址:}了解MAC地址的组成,辨识MAC地址类型。 \item \textbf{分析以太网帧结构:}观察以太网帧的首部和尾部, 了解数据封装成帧的原理。 \item \textbf{分析ARP协议:}抓取ARP请求和应答报文,分析其工作过程。 \end{enumerate} \subsection{实验原理} \label{subsec:c:wireshark:s:arp_principle} \subsubsection{Wireshark简介} Wireshark软件是目前全球使用最广泛的开源网络数据包分析工具(前身为Ethereal), 由Gerald Combs编写并于1988年获开源许可发布。 网络数据包分析是指进入网络通信系统、 捕获和解码网络上实时传输数据以及搜集统计信息的过程。 通过Wireshark对网络数据进行分析, 我们能够了解网络是如何运行的、数据包是如何被转发的、应用是如何被访问的; 能够分析各层网络协议的性能、掌握通信主体的运行情况, 确认带宽分配和时延大小、查看应用的快慢并改进优化, 识别网络中存在的攻击或恶意行为、解决网络异常和故障。 Wireshark可以在Windows、Linux和macOS操作系统中运行, 具备友好的图形界面、丰富的统计及图表分析功能。 \subsubsection{以太网MAC帧格式} 本实验基于使用最广泛的有线局域网(以太网Ethernet II), 以太网的帧结构如表\ref{tab:c:wireshark_eth-format}所示。 其中,MAC地址(Media Access Control Address,媒体存取控制位址)或称物理地址(Physical Address), 用于在网络中标识网卡。MAC地址的长度为48位(6个字节), 通常表示为12个16进制数,如:00-16-EA-AE-3C-40。 其中前3个字节的16进制数00-16-EA代表网络硬件制造商的编号、即组织唯一标志符(OUI), 它由IEEE分配; 而后3个字节的16进制数AE-3C-40代表该制造商所生产的某个网络产品(如网卡)的系列号。 \begin{table}[!ht] \small \centering \caption{以太网帧格式} \label{tab:c:wireshark_eth-format} \begin{tabular}{|c|c|c|c|c|c|} \hline \heiti 前导字符 & \heiti 目的MAC地址 & \heiti 源MAC地址 & \heiti 类型 & \heiti IP数据报 & \heiti 帧校验\\ \hline 8字节 & 6字节 & 6字节 & 2字节 & 46-1500字节 & 4字节 \\ \hline \end{tabular} \end{table} \subsubsection{ARP协议及数据报格式} 地址解析协议(Address Resolution Protocol,ARP), 主要作用是将IP地址解析为MAC地址。当某主机或网络设备要发送数据给目标主机时, 必须知道对方的网络层地址(即IP地址),而且在数据链路层封装成帧时, 还必须有目标主机(或下一跳路由器)的MAC地址。 本实验重点观察最简单的情形: 同一个网段内,主机A要向主机B发送信息时, ARP解析的过程(主机A和B不在同一网段的情况请参阅课本相关内容)。具体如下: \begin{enumerate} \item 主机A首先查看自己的ARP表。如果找到了主机B的MAC地址, 则利用这个地址对IP数据报进行帧封装,并将数据报发送给主机B。 \item 如果主机A在ARP表中找不到主机B的MAC地址,则以广播方式发送一个ARP请求报文。 ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址, 目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。 由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求, 但只有被请求的主机B会对该请求进行处理。 \item 主机B比较自己的IP地址和ARP请求报文中的目标IP地址, 当两者相同时进行如下处理: 将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。 然后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。 \item 主机A收到ARP响应报文后, 将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发, 同时将IP数据报进行封装后发送出去。 \end{enumerate} ARP报文结构如图\ref{fig:c:wireshark_arp-format}所示, ARP报文总长度为28字节,MAC地址长度为6字节, IP地址长度为4字节。每个字段的含义如下: \begin{itemize} \item \textbf{硬件类型:}指明了发送方想知道的硬件接口类型,以太网的值为1。 \item \textbf{协议类型:}表示要映射的协议地址类型。IP 地址的类型值为0x0800。 \item \textbf{硬件地址长度和协议地址长度:}分别指出硬件地址和协议地址的长度, 以字节为单位。在以太网中,它们的值分别为6和4。 \item \textbf{操作码(op):}用来表示这个报文的类型, ARP 请求为1,ARP 响应为2,RARP 请求为3,RARP 响应为4。 \end{itemize} \begin{figure}[!ht] \centering \includegraphics[width=9cm]{arp-format} \caption{ARP报文结构示意图} \label{fig:c:wireshark_arp-format} \end{figure} \subsubsection{实验方法及手段} 使用Wireshark软件在有线局域网中捕捉相关网络操作的数据包, 运用观察对比、计算验证、分析统计等方法, 掌握以太网MAC帧和IP数据报的结构以及ARP协议的工作原理。 \subsection{实验条件} \label{subsec:c:wireshark:s:arp_requirement} \begin{itemize} \item PC机一台,连入局域网; \item Wireshark软件,建议3.0以上版本。 \end{itemize} \subsection{实验步骤} \label{subsec:c:wireshark:s:arp_procedure} \subsubsection{WireShark基本使用} \begin{enumerate} \item 通过Wireshark官网下载最新版软件,按默认选项安装。 \item 运行Wireshark软件,程序界面会显示当前的网络接口列表, 双击要观察的网络接口,开始捕捉数据包, Wireshark软件选择网络接口的界面如图\ref{fig:c:wireshark_wireshark-boot-ui}所示。 \begin{figure}[!ht] \centering \includegraphics[width=12cm]{wireshark-boot-ui} \caption{Wireshark软件启动界面} \label{fig:c:wireshark_wireshark-boot-ui} \end{figure} \item 点击工具栏上的红色方块按钮停止捕捉。 \item 菜单、工具栏、状态栏和主窗口如图\ref{fig:c:wireshark_wireshark-main-ui}所示, 可以根据需要通过菜单“视图”以及“编辑/首选项/外观”的相关选项对基本设置进行更改。 例如图\ref{fig:c:wireshark_wireshark-setup-ui}中的语言、字体缩放、颜色、布局等项目。 \begin{figure}[!ht] \centering \includegraphics[width=12cm]{wireshark-main-ui} \caption{Wireshark主窗口界面} \label{fig:c:wireshark_wireshark-main-ui} \end{figure} \begin{figure}[!ht] \centering \includegraphics[width=12cm]{wireshark-setup-ui} \caption{Wireshark的设置界面} \label{fig:c:wireshark_wireshark-setup-ui} \end{figure} \item 使用“显示过滤器”可以方便地从捕获的数据包中筛选出要观察的数据包。 显示过滤器支持若干的过滤选项: 源MAC、目的MAC、源IP、目的IP、TCP/UDP传输协议、 应用层协议(HTTP, DHCP)、源端口Port、目的端口Port等。 在显示过滤器栏中输入过滤表达式( 更详细的显示过滤语法可以查看WireShark的官方文档 \footnote{ \href{https://www.wireshark.org/docs/wsug_html_chunked/ChWorkBuildDisplayFilterSection.html} {WireShark显示过滤器语法} } ),例如下面的命令: \begin{itemize} \item \texttt{arp~~~~~~~~~~~~~~~~~~~~~~~~//显示arp协议报文,例如图\ref{fig:c:wireshark_wireshark-filters}} \item \texttt{ip.src == a.b.c.d \&\& icmp~~//显示源地址为a.b.c.d的icmp报文} \end{itemize} \begin{figure}[!ht] \centering \includegraphics[width=12cm]{wireshark-filters} \caption{显示过滤规则的示例} \label{fig:c:wireshark_wireshark-filters} \end{figure} \item 通过主菜单“文件”/“导出特定分组”(如图\ref{fig:c:wireshark_wireshark-save}), 可以保存捕获的网络数据(也可以先选中某些包,只保存部分数据)。 \begin{figure}[!ht] \centering \includegraphics[width=12cm]{wireshark-save} \caption{操作主菜单保存数据文件} \label{fig:c:wireshark_wireshark-save} \end{figure} \item 如果只想捕捉特定的数据包, 可以使用菜单“捕获”/“捕获过滤器”选定想要的类型 (如图\ref{fig:c:wireshark_wireshark-special-type})。 例如,选择“IPv4 only”,Wireshark只抓取ipv4类型的数据包。 Wireshark过滤器官方文档提供了更加全面详细的语法和常用示例 \footnote{\href{https://wiki.wireshark.org/CaptureFilters/\#Useful_Filters} {WireShark常用过滤器语法}}。 \begin{figure}[!ht] \centering \includegraphics[width=12cm]{wireshark-special-type} \caption{选中特定的捕获类型} \label{fig:c:wireshark_wireshark-special-type} \end{figure} \item Wireshark还提供了丰富的统计功能供用户选用, 如图\ref{fig:c:wireshark_wireshark-statistic}。 更多文档可以查询Wireshark使用帮助 \footnote{\href{https://www.wireshark.org/\#learnWS}{WireShark学习手册}}。 \begin{figure}[!ht] \centering \includegraphics[width=12cm]{wireshark-statistic} \caption{统计功能} \label{fig:c:wireshark_wireshark-statistic} \end{figure} \end{enumerate} \subsubsection{观察MAC地址} 启动Wireshark捕捉数据包, 在命令行窗口分别ping网关和ping同网段的一台主机, 分析本机发出的数据包。 重点观察以太网帧的 Destination和Source的MAC地址, 辨识MAC地址类型,解读OUI信息、I/G和G/L位。 \subsubsection{分析以太网的帧结构} 选择其中一个数据包,点击Ethernet II展开(图\ref{fig:c:wireshark_eth-frame-detail}), 查看MAC帧的各个字段。 \begin{figure}[!ht] \centering \includegraphics[width=12cm]{eth-frame-detail} \caption{以太网帧结构展开界面} \label{fig:c:wireshark_eth-frame-detail} \end{figure} \begin{figure}[!ht] \centering \begin{code}[text] arp [-a [InetAddr] [-N IfaceAddr]] [-g [InetAddr] [-N IfaceAddr]] [-d InetAddr [IfaceAddr]] [-s InetAddr EtherAddr [IfaceAddr]] -a 显示所有接口/特定接口的当前 ARP 缓存表 -g 同 -a -d 删除所有/指定的IP地址项 -s 在ARP缓存中添加对应InetAddr地址的EtherAddr地址静态项 \end{code} \caption{arp命令语法及参数} \label{fig:arp-cmd} \end{figure} \subsubsection{ARP协议分析} \begin{enumerate} \item 使用\texttt{arp –d}命令(其语法见图\ref{fig:arp-cmd}), 清空本机的ARP缓存, 开启Wireshark,ping本机的同网段地址,在显示过滤器条框中输入“\texttt{arp}”, 观察捕获的ARP报文的各个字段,分析请求/响应的过程。 \item 使用\texttt{arp –d}命令,清空本机的ARP缓存。开启Wireshark, ping与本机网段不同的IP地址或域名,观察捕获的ARP报文的各个字段, 分析请求/响应的过程。 \end{enumerate} \subsection{思考题} \label{subsec:c:wireshark:s:arp_rethink} \begin{enumerate} \item 使用了显示过滤器后,Wireshark的抓包工作量会减少吗? \item MAC帧的长度和IP数据报的长度有怎样的关系?请用你的数据记录进行验证。 \item 假设本机IP地址是192.168.0.38,在本机上运行Wireshark捕获报文, 使用“\texttt{ip.addr == 192.168.0.38}”作为过滤条件, 能否过滤出本机发出/收到的ARP报文?为什么? \item ping同一局域网内的主机和局域网外的主机,都会产生ARP报文么? 所产生的ARP报文有何不同,为什么? \item ARP请求数据包是支撑TCP/IP协议正常运作的广播包。 如果滥发或错发ARP广播包会产生那些不良影响?如何发现和应对? \item 什么是免费 ARP(Gratuitous ARP)?它的作用是什么? 请使用Wireshark进行捕捉和分析。 \end{enumerate} \subsection{考核方法} \label{subsec:c:wireshark:s:arp_criterion} 考核分为现场考核和实验报告两个部分,具体如下。 报告内容应包含以下内容,相关的分析解释都需要截图证明, 并与提交的Wireshark抓包数据文件相吻合。 \begin{enumerate} \item (20分)现场考核:Wireshark的基本使用。 \item (30分)以太网帧格式分析:MAC地址类型、头部信息、长度及封装。 \item (30分)结合捕捉的网络数据,分析ARP数据包,描述ARP协议工作过程。 \item (10分)回答任意两道思考题。 \item (10分)记录自己在本次实验中所遇到的问题,以及心得感悟。 如果遇到异常情况,或者无法完成任务时,也请分析错误产生的原因。 \end{enumerate}