|
|
%# -*- 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}
|