实验目的
学习安装、使用协议分析软件,掌握基本的数据报抓取、 过滤和分析方法,能分析HTTP、TCP、ICMP等协议。
实验环境
使用具有Internet连接的MacOs操作系统; 抓包软件Wireshark。
实验内容:
- 安装学习Wireshark软件
- 抓包与分析HTTP协议
- 分析TCP协议
- 分析TCP三次握手
- 分析ICMP协议
实验步骤:
1. 安装学习Wireshark软件
(1) 首先在官网下载wireshark软件
根据系统版本选择macOS Arm 64-bit.dmg并安装
(2) 运行Wireshark,初始界面如下图。
(3) 从接口列表中选择要捕获的接口,双击即可开始捕获。
双击
(4) Wireshark进入主界面,并开始捕获分组。
使用左上角的按钮开始或停止捕获分组 主界面中可以看见过滤器、分组列表栏、分组详情栏、分组字节栏、状态栏。
(5) 过滤器的使用
① 协议过滤 例如http
② IP地址过滤 例如ip.src == 172.30.208.8
③ 模式过滤 例如http.request.method==”GET”用于过滤http请求方法是POST的分组
④ 端口过滤 例如tcp.port == 80,用于过滤tcp端口号是80的分组
(6) 分组详情栏 自上而下分别是物理层,链路层,网络层,传输层,应用层
Frame: 物理层的数据帧概况 Ethernet II: 数据链路层以太网帧头部信息 Internet Protocol Version 4: 互联网层IP包头部信息 Transmission Control Protocol: 传输层T的数据段头部信息 Hypertext Transfer Protocol: 应用层的信息
2. 抓包与分析HTTP协议
(1) 开启Wireshark抓包,在过滤器中输入http,即过滤http协议的分组。
(2) 打开浏览器,输入一个网址
本次实验以计算机网络UOOC网址http://www.uooc.net.cn/home/learn/index#/1138570567/962085269/1242952600/1500174221/section为例,在chrome中以无痕模式打开该网址
(3) 观察到Wireshark分组列表栏中出现了HTTP协议分组。
(4) 点开详情页,我们可以在分组详情栏中看到更具体的信息。
我们可以知道服务器主机名为www.uooc.net.cn,我们请求的目录是/home/learn/index。
当然我们也可以通过http协议信息知道user-agent,例如本次请求他就显示我的客户端主机信息为Mac OS X。
通过HTTP协议信息我们可以了解到客户端与服务器端的各种基本信息。
(5) 从步骤四所得的分组,获知此次通信的源IP地址和目的IP地址。 这里,172.30.208.8是私有IP地址,即用户的主机;目的IP地址为120.78.21.18,即服务器的主机地址。
3. 分析 TCP协议
(1) 首先查看TCP协议信息
我们可以获得如下信息等: 源端口号:54378 目的端口号:80 序列号:2642300584 确认号:572491362 报头长度:20 bytes(5) 标志位:0x018 窗口大小:4096 校验和:0xbb4e
(2) 追踪其TCP流。
点击右键,从下拉菜单中选择TCP流。
(3) 建立TCP流
TCP连接建立在HTTP GET请求之前完成
并且我们可以在info信息中看到标志位[SYN,ACK]
4. TCP三次握手
TCP三次握手的过程如下:
1)客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。 2)服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。 3)客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
(1) 第一次握手(SYN) 可以看出,由于使用的是HTTPS协议打开的网页,所以TCP端口为54378。Src为客户端,Dst为访问的域名接续后的ip,所以这是客户端发送给服务端的数据。可以看到客户端将Flags标志位SYN置为1,随机产生一个值Sequence Number = 0作为序号,并将该数据包发送给服务器,客户机进入SYN_SENT状态,等待服务器确认。默认显示的是序列号 seq 是相对值,真实值为2642300583。
(2) 第二次握手(SYNACK) 该数据包的Src是服务端,Dst是客户端,说明这是服务器发送给客户端的数据。这时观察到,SYN仍然为1。然后,服务端将确认号设置为客户的序号seq加1,即0+1=1, ACK变为了1(真实值为572491361),说明服务端收到了TCP请求。此时,seq由服务器随机生成相对值0(真实值为2642300584)。
(3) 第三次握手(ACK) 该数据包的Src为客户端,Dst为服务端,这是客户端发送的数据包。在第三次握手中,客户端收到第二次握手中服务器发来的包后检查确认序号Seq是否正确,即第一次发送的序号Seq加1(X+1= 0+1=1)。以及标志位ACK是否为1。若正确,客户端会再向服务器端发送一个数据包,SYN=0,ACK=1,确认序号Ack=Y+1=0+1=1,并且把服务器发来ACK的序号Seq加1发送给对方,发送序号Seq为X+1= 0+1=1。客户端收到后确认序号值与ACK=1,至此,一次TCP连接就此建立,可以传送数据了。
5. 分析ICMP协议
(1) 分别使用终端去ping百度,wireshark根据icmp协议进行筛选 最终会得到如下信息:
抓包软件中看到一个request请求包和一个reply回应包,一个TTL为64,一个为50
选取其中的一个数据包进行查看: 报文由IP首部和ICMP报文组成。IP首部共有20字节。
ICMP报文,共有40字节。
(2) 我尝试了以下操作
我ping了一个不存在的主机,例如10.104.125.345。 在wireshark中就抓不到ICMP包
|