Wireshark

Wireshark说明

Wireshark 是一款开源的网络协议分析工具,它可以帮助用户捕获和分析网络数据包,从而深入了解网络通信过程并识别潜在的问题。以下是关于 Wireshark 的介绍:

  • 功能丰富:Wireshark 提供了丰富的功能,包括捕获网络数据包、显示捕获结果、过滤和搜索数据包、统计网络流量等。它支持多种网络协议的解析和分析,包括以太网、IP、TCP、UDP、HTTP、DNS 等。
  • 跨平台支持:Wireshark 可以在多种操作系统上运行,包括 Windows、macOS 和 Linux。这使得用户可以在不同的平台上使用相同的工具进行网络分析和故障排除。
  • 用户友好界面:Wireshark 提供了直观友好的用户界面,易于上手和使用。用户可以通过图形界面进行数据包的捕获、查看和分析,也可以使用命令行界面进行更高级的操作。
  • 强大的过滤和搜索功能:Wireshark 提供了灵活强大的过滤和搜索功能,用户可以根据各种条件和标准进行数据包的筛选和检索,从而快速定位感兴趣的数据包。
  • 支持插件扩展:Wireshark 支持通过插件扩展其功能,用户可以根据需要添加额外的功能或协议解析器,以满足特定的分析需求。
  • 广泛应用领域:Wireshark 在网络管理、网络安全、网络故障排除、协议开发等领域都有广泛的应用。无论是网络管理员、安全专家、开发人员还是学生,都可以通过使用 Wireshark 来深入理解和分析网络通信。

Wireshark软件安装

软件下载路径:wireshark下载。按照系统版本选择下载,下载完成后,按照软件提示一路Next安装。

Wireshark 开始抓包示例

介绍一个使用wireshark工具抓取ping命令操作的示例,感受一下抓包的具体过程.
后边逐次介绍tcp等

1、打开wireshark ,主界面如下:

在这里插入图片描述

2.选择要抓包的网卡,选择WLAN网卡

(这里需要根据各自电脑网卡使用情况选择,简单的办法可以看使用的IP对应的网卡),如图,选中以太网,点击Start。启动抓包。双击选择的网卡信息

在这里插入图片描述
在这里插入图片描述

点击开始后,进入如下页面

在这里插入图片描述

3、wireshark启动后,wireshark处于抓包状态中。

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bb3a65160afa457aadf8ce92ded78b99.png

4、执行需要抓包的操作,如在cmd窗口下执行ping www.baidu.com。

在这里插入图片描述

5、操作完成后相关数据包就抓取到了。

为避免其他无用的数据包影响分析,可以通过在过滤栏设置过滤条件进行数据包列表过滤,获取结果如下。说明:ip.addr == 180.101.50.188 and icmp 表示只显示ICPM协议且源主机IP或者目的主机IP为119.75.217.26的数据包。说明:协议名称icmp要小写。

在这里插入图片描述

在这里插入图片描述

5、wireshark抓包完成,就这么简单。关于wireshark显示过滤条件、抓包过滤条件、以及如何查看数据包中的详细内容在后面介绍。

Wireshakr抓包界面介绍

在这里插入图片描述
说明:数据包列表区中不同的协议使用了不同的颜色区分。协议颜色标识定位在菜单栏View --> Coloring Rules。如下所示

在这里插入图片描述

Wireshark 窗口介绍

在这里插入图片描述

WireShark 主要分为这几个界面

  1. Display Filter(显示过滤器), 用于过滤

  2. Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不同,代表

  3. Packet Details Pane(封包详细信息), 显示封包中的字段

  4. Dissector Pane(16进制数据)

  5. Miscellanous(地址栏,杂项)

1. Display Filter(显示过滤器)

用于设置过滤条件进行数据包列表过滤。菜单路径:Analyze --> Display Filters。

在这里插入图片描述
使用过滤是非常重要的, 初学者使用wireshark时,将会得到大量的冗余信息,在几千甚至几万条记录中,以至于很难找到自己需要的部分。搞得晕头转向。

过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。

补充说明:捕获过滤器与显示过滤器区别
捕获过滤器

一)作用

用于确定什么样的信息记录会显示在捕获结果中。注意:需要在开始捕获前设置。
设置捕获过滤器
二)捕获过滤器语法

过滤器格式:协议 方向 主机端口(host/port/portrange)

    1. protocol:可能值http、https、ftp、udp、tcp、ipv4、ipv6、arp、icmp等协议。如果没有特别说明是什么协议,则默认使用所有支持的协议。
    1. direction:可能的值 src、dst、src and dst、src or dst 默认src or dst
    1. host(s):可能的值 net、port、host、portrange 默认host
    1. logical operation(逻辑运算):not and or not具有最高优先级,and or优先级相同,运算从左向右

三)设置捕获过滤器

1.通过捕获工具栏来设置 如图
在这里插入图片描述
    2.手动输入
在这里插入图片描述
 四)举个栗子

显示tcp协议,目标端口3128的封包 tcp src port 3128
显示ip协议,来源ip为10.1.1.1的封包 ip src host 10.1.1.1
显示ip协议,来源目标ip为10.1.1.1的封包 ip host 10.1.1.1
显示来源UDP,TCP协议,并且端口号在2000-5000的封包 src portrange 2000-5000
显示imcp以为的所有封包 not imcp

显示过滤器

一)简介

显示过滤器是wireshark的第二层过滤器(第一层为捕获过滤器),他能很快的过滤出我们需要的封包数据。

二)显示过滤器的语法

  • 比较操作符:==、!=、<、>、>=、=
  • 逻辑操作符:and、or、not(没有条件满足)、xor(有且仅有一个条件满足)
  • IP地址:ip.addr(来源ip地址或者目标ip地址)、ip.src(来源ip地址限制)、ip.dst(目标ip地址限制)
  • 协议过滤:arp、ip、icmp、udp、tcp、bootp、dns

注意:显示过滤器输入之后要按回车才会生效。在大文件里应用过滤显示器会有延迟。

三)显示过滤器的入口

1.手动输入

在这里插入图片描述
 
四)举个栗子

  • 显示snmp或者dns或者icmp协议的封包 snmp || dns || icmp
  • 显示来源或者目标地址为10.1.1.1的封包 ip.addr == 10.1.1.1
  • 显示来源不为10.1.2.3且目标不为10.4.5.6的封包 ip.src != 10.1.2.3 or ip.src != 10.4.5.6
  • 显示来源或者目的端口为25的封包 tcp.port == 25
  • 显示目的tcp端口为25的封包 tcp.dstport == 25
  • 显示包含tcp标志的封包 tcp.flags
  • 显示来源ip为10.1.2.3目标地址为10.4.5.6的封包 ip.src == 10.1.2.3 and ip.dst == 10.4.5.6
2. Packet List Pane(数据包列表)

在这里插入图片描述

显示捕获到的数据包,每个数据包包含编号,时间戳,源地址,目标地址,协议,长度,以及数据包信息。 不同协议的数据包使用了不同的颜色区分显示。

  • No.:封包的序号,按照捕获的顺序递增。
  • Time:封包的时间戳,显示了封包捕获的时间。
  • Source:封包的源地址,即发送封包的主机的 IP 地址。
  • Destination:封包的目标地址,即接收封包的主机的 IP 地址。
  • Protocol:封包使用的协议,例如 TCP、UDP 或 ICMP。
  • Length:封包的长度,以字节为单位。
  • Info:封包的简要信息,通常包括一些关键字段的值,如 seq、ack、win、mss 等。

对于包含详细信息的 Info 列,如 seq(序列号)、ack(确认号)、win(窗口大小)、mss(最大报文段长度)等,可以单击该列以查看更多详细信息。这些信息通常是 TCP 封包的一部分,用于管理数据传输过程中的流控制、传输控制等方面。

  • Seq(Sequence Number):TCP封包的序列号(Sequence Number),用于在TCP连接中按顺序重组数据包。
  • Ack(Acknowledgement Number):TCP封包的确认号(Acknowledgement Number),表示接收方期望接收的下一个数据包的序列号。
  • Win(Window Size):TCP封包的最大报文段长度(Maximum Segment Size),表示发送方能够发送的最大TCP数据包的长度。
  • MSS(Maximum Segment Size):TCP 最大报文段长度,表示发送端能够发送的最大 TCP 数据包的长度。
  • Len:封包的长度(Length),以字节为单位。

在这里插入图片描述

3. Packet Details Pane(数据包详细信息),

在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为

(1)Frame: 物理层的数据帧概况

(2)Ethernet II: 数据链路层以太网帧头部信息

(3)Internet Protocol Version 4: 互联网层IP包头部信息

(4)Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP

(5)Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4. Dissector Pane(16进制数据)

这里显示的内容与“封包详细信息”中相同,只是改为以16进制的格式表述。
在上面的例子里,我们在“封包详细信息”中选择查看TCP 源端口(3389),其对应的16进制数据将自动显示在下面的面板中(0d3d)。
在这里插入图片描述

计算一下这两个端口的十六进制的值:
在这里插入图片描述

5. Miscellanous(地址栏,杂项)

在程序的最下端,您可以获得如下信息:

    • 正在进行捕捉的网络设备。
  • 捕捉是否已经开始或已经停止。
  • 捕捉结果的保存位置。
  • 已捕捉的数据量。
  • 已捕捉封包的数量。§
  • 显示的封包数量。(D) (经过显示过滤器过滤后仍然显示的封包)
  • 被标记的封包数量。(M)

Wireshark过滤器设置

初学者使用wireshark时,将会得到大量的冗余数据包列表,以至于很难找到自己需要抓取的数据包部分。wireshark工具中自带了两种类型的过滤器,学会使用这两种过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。

(1)抓包过滤器

在这里插入图片描述

显示过滤器是用于在抓取数据包后设置过滤条件进行过滤数据包。通常是在抓取数据包时设置条件相对宽泛或者没有设置导致抓取的数据包内容较多时使用显示过滤器设置条件过滤以方便分析。同样上述场景,在捕获时未设置抓包过滤规则直接通过网卡进行抓取所有数据包,如下

所有的包
在这里插入图片描述
设置抓包过滤规则
观察上述获取的数据包列表,含有大量的无效数据。这时可以通过设置显示器过滤条件进行提取分析信息。ip.addr == 180.101.50.188 and icmp。并进行过滤。

在这里插入图片描述

TCP包 详解

TCP包的具体内容

从下图可以看到wireshark捕获到的TCP包中的每个字段。

在这里插入图片描述

看到这, 基本上对wireshak有了初步了解, 现在我们看一个TCP三次握手的实例

三次握手过程为

在这里插入图片描述

打开wireshark, 打开浏览器输入 http://www.cr173.com

在wireshark中输入http过滤, 然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点击”Follow TCP Stream”,

这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图

在这里插入图片描述

图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

第一次握手数据包

客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图

SYN :标志位,表示请求建立连接

Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据

Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据

在这里插入图片描述
第二次握手的数据包

服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 如下图

数据包的关键属性如下:

  • 【SYN + ACK】: 标志位,同意建立连接,并回送SYN+ACK
  • Seq = 0 :初始建立值为0,表示当前还没有发送数据
  • Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)

在这里插入图片描述

第三次握手的数据包

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:
数据包的关键属性如下:

  • ACK :标志位,表示已经收到记录
  • Seq = 1 :表示当前已经发送1个数据
  • Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

在这里插入图片描述
就这样通过了TCP三次握手,建立了连接

在这里插入图片描述
下面针对数据交互过程的数据包进行一些说明:

在这里插入图片描述

数据包的关键属性说明

Seq: 1

Ack: 1: 说明现在共收到1字节数据
在这里插入图片描述
Seq: 1
Ack: 951: 说明现在服务端共收到951字节数据

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG。如下
在这里插入图片描述

其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有DATA数据传输,RST表示连接重置。

wireshark过滤器表达式的规则

1、抓包过滤器语法和实例

抓包过滤器类型Type(host、net、port)、方向Dir(src、dst)、协议Proto(ether、ip、tcp、udp、http、icmp、ftp等)、逻辑运算符(&& 与、|| 或、!非)

(1)协议过滤

比较简单,直接在抓包过滤框中直接输入协议名即可。

  tcp,只显示TCP协议的数据包列表

  http,只查看HTTP协议的数据包列表

  icmp,只显示ICMP协议的数据包列表
(2)IP过滤
  host 192.168.1.104

  src host 192.168.1.104

  dst host 192.168.1.104
(3)端口过滤
  port 80

  src port 80

  dst port 80
(4)逻辑运算符&& 与、|| 或、!非
  src host 192.168.1.104 && dst port 80 抓取主机地址为192.168.1.80、目的端口为80的数据包

  host 192.168.1.104 || host 192.168.1.102 抓取主机为192.168.1.104或者192.168.1.102的数据包

  !broadcast 不抓取广播数据包

2、显示过滤器语法和实例

(1)比较操作符

比较操作符有== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于。

(2)协议过滤

比较简单,直接在Filter框中直接输入协议名即可。注意:协议名称需要输入小写。

  tcp,只显示TCP协议的数据包列表

  http,只查看HTTP协议的数据包列表

  icmp,只显示ICMP协议的数据包列表

在这里插入图片描述
在这里插入图片描述

(3) ip过滤

ip.src ==192.168.1.104 显示源地址为192.168.1.104的数据包列表

ip.dst==192.168.1.104, 显示目标地址为192.168.1.104的数据包列表

ip.addr == 192.168.1.104 显示源IP地址或目标IP地址为192.168.1.104的数据包列表

在这里插入图片描述

(4)端口过滤

tcp.port ==80, 显示源主机或者目的主机端口为80的数据包列表。

tcp.srcport == 80, 只显示TCP协议的源主机端口为80的数据包列表。

tcp.dstport == 80,只显示TCP协议的目的主机端口为80的数据包列表。

在这里插入图片描述

(5) Http模式过滤

http.request.method==”GET”, 只显示HTTP GET方法的。

(6)逻辑运算符为 and/or/not

过滤多个条件组合时,使用and/or。比如获取IP地址为192.168.1.104的ICMP数据包表达式为ip.addr == 192.168.1.104 and icmp

在这里插入图片描述

(7)按照数据包内容过滤。

假设我要以IMCP层中的内容进行过滤,可以单击选中界面中的码流,在下方进行选中数据。如下

在这里插入图片描述

右键单击选中后出现如下界面

在这里插入图片描述

在这里插入图片描述
选中Select后在过滤器中显示如下

在这里插入图片描述

后面条件表达式就需要自己填写。如下我想过滤出data数据包中包含”abcd”内容的数据流。包含的关键词是contains 后面跟上内容。

在这里插入图片描述

Wireshark分析常用操作

调整数据包列表中时间戳显示格式

调整方法为试图–>时间显示格式–> 选择需要展示的格式即可。调整后格式如下:
在这里插入图片描述

参考链接:https://cloud.tencent.com/developer/article/2133420

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐