LV06-01-网络工具-02-wireshark

本文主要是网络基础——wireshark工具介绍和使用的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
SecureCRT Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日
开发板 正点原子 i.MX6ULL Linux阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
STM32开发板 正点原子战舰V3(STM32F103ZET6)
点击查看本文参考资料
参考方向 参考原文
------
点击查看相关文件下载
--- ---

一、wireshark简介

WireShark是非常流行的网络封包分析工具,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程中各种问题定位。Wireshark1998 年首次发布,最初被称为 Ethereal2006 年,由于商标问题,开发商不得不将其名称改为 Wireshark 。另外该软件可以运行在 WindowsLinux 操作系统上。

二、wireshark安装

1. 在Ubuntu中安装

为了获取最新版本的wireshark,我们通过PPA来安装这个软件:

1
2
3
sudo add-apt-repository ppa:wireshark-dev/stable
sudo apt update
sudo apt install wireshark

主要是上边的三条命令,按照提示进行安装即可。通过这种方式进行安装,即使安装了旧版本的 Wireshark ,它也将更新为新版本。

安装时(安装过程可能比较慢长,可以做点其他的事),系统将会询问我们是否允许非超级用户捕获数据包。选择Yes允许的话,即便不是root用户,也可以使用软件捕获数据包,选择No将会限制非超级用户捕获数据包,选择完毕后便会完成安装。

image-20220618110846035

安装完成后,打开软件,软件界面如下图所示:

image-20220618111433972

操作完成后,最好重启一下,这样就可以识别到当前系统的网卡啦,我安装好的时候是没显示ens开头的信息的,重启一下Ubuntu系统就好啦。

如果说在软件包设置那个界面选了 否(No) ,这个时候当我们终端直接运行wiresirk是没有问题的,可以正常打开界面,但是当我们开始抓包的时候就会弹出以下提醒,要是想在非root用户下也可以捕获数据包,要怎么办呢?

image-20220618111453975

我们在终端输入以下命令,便会重新弹出软件包设置界面。然后选择是即可。

1
sudo dpkg-reconfigure wireshark-common

软件设置完毕后,由于我们需要允许非超级用户捕获数据包,因此必须将该用户添加到 wireshark 组。使用 usermod命令将自己添加到 wireshark 组。

1
sudo usermod -aG wireshark $(whoami)

如此便可以在非root下,正常捕获数据包啦。

2. 在Windows下安装

其实多数情况,我们可能会在虚拟机中的wireshark中捕获数据包,然后放到Windows下来分析,可能会更方便一些。我们可以在这里下载wireshark软件的安装包:Wireshark · Go Deep-Download.

1
https://www.wireshark.org/#download
image-20220618111506066

我们在这里下载Windows Installer (64-bit),下载完成后,双击.exe可执行文件即可开始安装,这个没什么好说的,就是一路默认,一路next就完事了。安装完成后,双击运行,界面如下所指示:

image-20220618111522630

三、基本使用

1. 抓包实例

首先还是需要来看一下怎么抓包,这里我们抓取一下ping命令操作过程中的数据包,这里我们直接在Windows下的wireshark软件中进行。

1.1 选择网卡

当我们进入wireshark的时候,会看到接口选择界面,我们选择显示所有接口,由于我的电脑连接的是Wifi所以我这里选择WLAN

image-20220623061241634

双击之后,便会进入抓包的界面(或者就是【右键】→【start capture】),如下图所示:

image-20220623061406002

双击之后直接就开始抓包了,这个时候我还开着网页以及一些联网的应用,所以出来直接就有很多数据了,在Ubuntu中的时候好像就没有这么多的。

1.2 ping

保持开启抓包的状态,然后我们打开Windows中的命令提示符,输入以下命令:

1
ping www.baidu.com

然后就会测试我们能否与该网站连通,界面如下所示:

image-20220623063051820

1.3 停止抓包

如下图所示,点击这个红色的方框就可以停止抓包了。

image-20220623063242825

1.4 保存数据

我们通过该软件抓到的数据包是可以进行保存,并在其他计算机中使用该软件打开分析的。

image-20220623063559863

然后我们这一次抓的包就会保存下来,保存的数据包文件后缀名为.pcapn

2. 界面简介

界面如下图所示:

image-20220623064059307
  • (1)菜单栏:用于调试,配置,保存等功能,其实所有的功能都可以在菜单栏进行操作;
  • (2)工具栏:就是一些常用功能的快捷方式,如保存捕获数据、停止捕获和开始捕获等;
  • (3)过滤栏:在这里指定过滤的规则,过滤我们需要的数据包;
  • (4)数据包列表:这里是我们捕获的所有数据包,每一行就是一个数据包;
  • (5)数据包详情:每个数据包的详细数据;
点击查看各部分说明

有的数据包详情中可能不仅仅有上图的四条:

image-20220623065749049
  • Frame: 物理层的数据帧概况,对应的是物理层;
  • Ethernet II: 数据链路层以太网帧头部信息,对应的是数据链路层;
  • Internet Protocol Version 4: 互联网层IP包的头部信息,对应的是网络层
  • Transmission Control Protocol: 传输层的数据段头部信息,此处是TCP,对应的是传输层
  • Hypertext Transfer Protocol: 应用层的信息,这一种就是HTTP协议,对应的是应用层

OSI七层模型的对应关系如下图所示:

image-20220623070731215
  • (6)数据包字节:数据包对应的字节流,二进制的形式显示。

3. 过滤器

我们在抓取数据包的时候会抓取大量不相关的数据包,如何过滤出我们需要的呢?wireshark给我们提供了提供了两个过滤器:捕获过滤器 和 显示过滤器。两个过滤器的过滤思路不同。

  • 捕获过滤器:重点在动作,需要的数据包才抓,不需要的就不抓。
  • 显示过滤器:重点在数据包的显示,所有的数据包已经抓了,只是不显示不需要的。

3.1 捕获过滤器

3.1.1 设置方式

我们只想抓一些自己需要的包,那么我们就需要在启动抓包之前或者停止抓包后使用捕获过滤器,我们在抓包开始之前,打开捕获过滤器界面:【菜单栏】→【捕获】→【选项】,然后便会打开以面板:

image-20220623071226766

【注意】这里会有自动的语法检测,当输入框变为绿色的时候说明语法正确,可以开始捕获,若为粉红色,则不能开始捕获,开始按钮也为灰色,无法选中。

有一些通用的捕获过滤器表达式每一次都全部写一遍不免有些麻烦,我们可以在捕获过滤器选项中保存一些通用的过滤器,然后在设置捕获过滤器的时候直接选择即可:【菜单栏】→【捕获】→【捕获过滤器】

image-20220623071228755

3.1.2 表达式语法

捕获过滤器表达式的语法格式被称为BPF,(全称 Berkeley Packet Filter),中文叫伯克利封包过滤器。语法格式为:

1
<Protocol> <Direction> <Type> <Value> <逻辑运算符> <其他表达式>

各部分含义如下:

协议 Protocol各种网络协议,比如:tcp、udp、http
方向 Direction源地址(src)、目标地址(dst)
类型 Type主机(host)、网段(net)、端口(port)
值 value主机(host)、网段(net)、端口(port)等的值
逻辑运算符与( && )、或( || )、非( !)
其他表达式需要同时应用的其他过滤器表达式

【注意】这些个元素可以自由组合。

点击查看实例
  • 抓取TCP数据包

我们新增一个捕获过滤器,表达式的值设为:

1
TCP
image-20220623082957437

然后我们就可以开始只捕捉TCP的数据包了。

  • 抓取固定源的数据包
1
src host 192.168.1.10

这个就不再放图了,跟上边一样的设置方法。

3.3 显示过滤器

3.3.1 设置方式

下边我们来看一下另一种显示过滤器,这种过滤器会抓取全部的包,然后通过显示过滤器显示我们需要的包。显示过滤器的使用就在工具栏下边,即便是正在捕获数据包,也依然可以使用显示过滤器:

image-20220623085909290

【注意】这里也会有自动的语法检测,当输入框变为绿色的时候说明语法正确,若为粉红色,说明语法有误,需要修改。

3.3.2 表达式语法

显示过滤器的语法如下:

1
<协议>.<字段> <比较运算符> <值> <逻辑运算符> <其他表达式>

各部分说明如下:

协议tcp、udp、http等
字段源IP端口(srcport)、目标IP端口(dstport)等
比较运算符 >、<、==、>=、<=、!=
逻辑运算符 and、or、not、xor(有且仅有一个条件被满足)

例如,

1
2
3
4
5
6
7
8
tcp.srcport == 443     # 只抓取源IP端口为443的tcp数据
tcp.dstport == 8181 # 只抓取目标IP端口为8181的tcp数据
not arp # 不是arp的其他数据
tcp # 显示TCP协议的包
tcp.srcport==443 # 显示TCP协议源端口为443的包

ip.src == 192.168.1.100 and tcp.dstport == 80
ip.addr == 192.168.1.100 and udp.port == 3000