【计算机网络】使用WireShark数据包抓取与分析

Alex_Shen
2022-03-28 / 0 评论 / 0 点赞 / 90 阅读 / 2,456 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

实验目的

学习安装、使用协议分析软件,掌握基本的数据报抓取、
过滤和分析方法,能分析HTTP、TCP、ICMP等协议。

实验环境

使用具有Internet连接的MacOs操作系统;
抓包软件Wireshark。

实验内容:

  1. 安装学习Wireshark软件
  2. 抓包与分析HTTP协议
  3. 分析TCP协议
  4. 分析TCP三次握手
  5. 分析ICMP协议

实验步骤:

1. 安装学习Wireshark软件

(1) 首先在官网下载wireshark软件

根据系统版本选择macOS Arm 64-bit.dmg并安装
img

(2) 运行Wireshark,初始界面如下图。
img

(3) 从接口列表中选择要捕获的接口,双击即可开始捕获。
img

双击
img

(4) Wireshark进入主界面,并开始捕获分组。

使用左上角的按钮开始或停止捕获分组
主界面中可以看见过滤器、分组列表栏、分组详情栏、分组字节栏、状态栏。
img

(5) 过滤器的使用

① 协议过滤
例如http
img

② IP地址过滤
例如ip.src == 172.30.208.8
img

③ 模式过滤
例如http.request.method==”GET”用于过滤http请求方法是POST的分组
img

④ 端口过滤
例如tcp.port == 80,用于过滤tcp端口号是80的分组
img

(6) 分组详情栏
自上而下分别是物理层,链路层,网络层,传输层,应用层

Frame: 物理层的数据帧概况
Ethernet II: 数据链路层以太网帧头部信息
Internet Protocol Version 4: 互联网层IP包头部信息
Transmission Control Protocol: 传输层T的数据段头部信息
Hypertext Transfer Protocol: 应用层的信息
img

2. 抓包与分析HTTP协议

(1) 开启Wireshark抓包,在过滤器中输入http,即过滤http协议的分组。
img

(2) 打开浏览器,输入一个网址

本次实验以计算机网络UOOC网址http://www.uooc.net.cn/home/learn/index#/1138570567/962085269/1242952600/1500174221/section为例,在chrome中以无痕模式打开该网址

(3) 观察到Wireshark分组列表栏中出现了HTTP协议分组。
img

(4) 点开详情页,我们可以在分组详情栏中看到更具体的信息。
img

我们可以知道服务器主机名为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,即服务器的主机地址。
img

3. 分析 TCP协议

(1) 首先查看TCP协议信息
img

我们可以获得如下信息等:
源端口号:54378
目的端口号:80
序列号:2642300584
确认号:572491362
报头长度:20 bytes(5)
标志位:0x018
窗口大小:4096
校验和:0xbb4e

(2) 追踪其TCP流。

点击右键,从下拉菜单中选择TCP流。
img

(3) 建立TCP流

TCP连接建立在HTTP GET请求之前完成
img

并且我们可以在info信息中看到标志位[SYN,ACK]
img

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。
img

(2) 第二次握手(SYNACK)
该数据包的Src是服务端,Dst是客户端,说明这是服务器发送给客户端的数据。这时观察到,SYN仍然为1。然后,服务端将确认号设置为客户的序号seq加1,即0+1=1, ACK变为了1(真实值为572491361),说明服务端收到了TCP请求。此时,seq由服务器随机生成相对值0(真实值为2642300584)。
img

(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连接就此建立,可以传送数据了。
img

5. 分析ICMP协议

(1) 分别使用终端去ping百度,wireshark根据icmp协议进行筛选
最终会得到如下信息:
img
img

抓包软件中看到一个request请求包和一个reply回应包,一个TTL为64,一个为50

选取其中的一个数据包进行查看:
报文由IP首部和ICMP报文组成。IP首部共有20字节。
img

ICMP报文,共有40字节。
img

(2) 我尝试了以下操作

我ping了一个不存在的主机,例如10.104.125.345。
在wireshark中就抓不到ICMP包
img

0

评论区