LV020-wireshark
本文主要是网络基础——wireshark工具介绍和使用的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
一、wireshark简介
WireShark是非常流行的网络封包分析工具,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程中各种问题定位。Wireshark 于 1998 年首次发布,最初被称为 Ethereal 。2006 年,由于商标问题,开发商不得不将其名称改为 Wireshark 。另外该软件可以运行在 Windows 和 Linux 操作系统上。
二、wireshark安装
1. 在Ubuntu中安装
为了获取最新版本的wireshark,我们通过PPA来安装这个软件:
sudo add-apt-repository ppa:wireshark-dev/stable
sudo apt update
sudo apt install wireshark主要是上边的三条命令,按照提示进行安装即可。通过这种方式进行安装,即使安装了旧版本的 Wireshark ,它也将更新为新版本。
安装时(安装过程可能比较慢长,可以做点其他的事),系统将会询问我们是否允许非超级用户捕获数据包。选择Yes允许的话,即便不是root用户,也可以使用软件捕获数据包,选择No将会限制非超级用户捕获数据包,选择完毕后便会完成安装。

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

操作完成后,最好重启一下,这样就可以识别到当前系统的网卡啦,我安装好的时候是没显示ens开头的信息的,重启一下Ubuntu系统就好啦。
如果说在软件包设置那个界面选了 否(No) ,这个时候当我们终端直接运行wiresirk是没有问题的,可以正常打开界面,但是当我们开始抓包的时候就会弹出以下提醒,要是想在非root用户下也可以捕获数据包,要怎么办呢?

我们在终端输入以下命令,便会重新弹出软件包设置界面。然后选择是即可。
sudo dpkg-reconfigure wireshark-common软件设置完毕后,由于我们需要允许非超级用户捕获数据包,因此必须将该用户添加到 wireshark 组。使用 usermod命令将自己添加到 wireshark 组。
sudo usermod -aG wireshark $(whoami)如此便可以在非root下,正常捕获数据包啦。
2. 在Windows下安装
其实多数情况,我们可能会在虚拟机中的wireshark中捕获数据包,然后放到Windows下来分析,可能会更方便一些。我们可以在这里下载wireshark软件的安装包:Wireshark · Go Deep-Download.
https://www.wireshark.org/#download我们在这里下载Windows Installer (64-bit),下载完成后,双击.exe可执行文件即可开始安装,这个没什么好说的,就是一路默认,一路next就完事了。安装完成后,双击运行,界面如下所指示:

三、基本使用
1. 抓包实例
首先还是需要来看一下怎么抓包,这里我们抓取一下ping命令操作过程中的数据包,这里我们直接在Windows下的wireshark软件中进行。
1.1 选择网卡
当我们进入wireshark的时候,会看到接口选择界面,我们选择显示所有接口,由于我的电脑连接的是Wifi所以我这里选择WLAN。

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

双击之后直接就开始抓包了,这个时候我还开着网页以及一些联网的应用,所以出来直接就有很多数据了,在Ubuntu中的时候好像就没有这么多的。
1.2 ping
保持开启抓包的状态,然后我们打开Windows中的命令提示符,输入以下命令:
ping www.baidu.com然后就会测试我们能否与该网站连通,界面如下所示:

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

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

然后我们这一次抓的包就会保存下来,保存的数据包文件后缀名为.pcapn。
2. 界面简介
界面如下图所示:

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

| 数据包内容 | 说明 |
|---|---|
Frame | 物理层的数据帧概况,对应的是物理层 |
Ethernet II | 数据链路层以太网帧头部信息,对应的是数据链路层 |
Internet Protocol Version 4 | 互联网层IP包的头部信息,对应的是网络层 |
Transmission Control Protocol | 传输层的数据段头部信息,此处是TCP,对应的是传输层 |
Hypertext Transfer Protocol | 应用层的信息,这一种就是HTTP协议,对应的是应用层 |
与OSI七层模型的对应关系如下图所示:

- (6)数据包字节:数据包对应的字节流,二进制的形式显示。
3. 过滤器
我们在抓取数据包的时候会抓取大量不相关的数据包,如何过滤出我们需要的呢?wireshark给我们提供了提供了两个过滤器:捕获过滤器 和 显示过滤器。两个过滤器的过滤思路不同。
- 捕获过滤器:重点在动作,需要的数据包才抓,不需要的就不抓。
- 显示过滤器:重点在数据包的显示,所有的数据包已经抓了,只是不显示不需要的。
3.1 捕获过滤器
3.1.1 设置方式
我们只想抓一些自己需要的包,那么我们就需要在启动抓包之前或者停止抓包后使用捕获过滤器,我们在抓包开始之前,打开捕获过滤器界面:【菜单栏】→【捕获】→【选项】,然后便会打开以面板:

【注意】这里会有自动的语法检测,当输入框变为绿色的时候说明语法正确,可以开始捕获,若为粉红色,则不能开始捕获,开始按钮也为灰色,无法选中。
有一些通用的捕获过滤器表达式每一次都全部写一遍不免有些麻烦,我们可以在捕获过滤器选项中保存一些通用的过滤器,然后在设置捕获过滤器的时候直接选择即可:【菜单栏】→【捕获】→【捕获过滤器】

3.1.2 表达式语法
捕获过滤器表达式的语法格式被称为BPF,(全称 Berkeley Packet Filter),中文叫伯克利封包过滤器。语法格式为:
<Protocol> <Direction> <Type> <Value> <逻辑运算符> <其他表达式>各部分含义如下:
| 协议 Protocol | 各种网络协议,比如:tcp、udp、http |
| 方向 Direction | 源地址(src)、目标地址(dst) |
| 类型 Type | 主机(host)、网段(net)、端口(port) |
| 值 value | 主机(host)、网段(net)、端口(port)等的值 |
| 逻辑运算符 | 与( && )、或( || )、非( !) |
| 其他表达式 | 需要同时应用的其他过滤器表达式 |
- 抓取
TCP数据包
我们新增一个捕获过滤器,表达式的值设为:
TCP
然后我们就可以开始只捕捉TCP的数据包了。
- 抓取固定源的数据包
src host 192.168.1.10这个就不再放图了,跟上边一样的设置方法。
3.3 显示过滤器
3.3.1 设置方式
下边我们来看一下另一种显示过滤器,这种过滤器会抓取全部的包,然后通过显示过滤器显示我们需要的包。显示过滤器的使用就在工具栏下边,即便是正在捕获数据包,也依然可以使用显示过滤器:

【注意】这里也会有自动的语法检测,当输入框变为绿色的时候说明语法正确,若为粉红色,说明语法有误,需要修改。
3.3.2 表达式语法
显示过滤器的语法如下:
<协议>.<字段> <比较运算符> <值> <逻辑运算符> <其他表达式>各部分说明如下:
| 协议 | tcp、udp、http等 |
| 字段 | 源IP端口(srcport)、目标IP端口(dstport)等 |
| 比较运算符 | >、<、==、>=、<=、!= |
| 逻辑运算符 | and、or、not、xor(有且仅有一个条件被满足) |
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