Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。
本文主要内容包括:
1、Wireshark软件下载和安装。
2、WireShark简单抓包示例。通过该例子学会怎么抓包以及如何简单查看分析数据包内容。
3、Wireshark过滤器使用。通过过滤器可以筛选出想要分析的内容。包括按照协议过滤、端口和主机名过滤、数据包内容过滤。
\\172.21.53.10正版软件中有wiresharp的安装包,一路next下来,进行安装。
先介绍一个使用wireshark工具抓取ping命令操作的示例,让读者可以先上手操作感受一下抓包的具体过程。
1、打开wireshark ,主界面如下:
2、选择菜单栏上捕获 -> 选项,勾选以太网。点击Start。启动抓包。
3、wireshark启动后,wireshark处于抓包状态中。
4、执行需要抓包的操作,如ping www.baidu.com。
5、操作完成后相关数据包就抓取到了。为避免其他无用的数据包影响分析,可以通过在过滤栏设置过滤条件进行数据包列表过滤,获取结果如下。说明:ip.addr == 172.21.161.4 and icmp 表示只显示ICPM协议且源主机IP或者目的主机IP为172.21.161.4的数据包。
wireshark抓包完成,就这么简单。关于wireshark过滤条件和如何查看数据包中的详细内容在后面介绍。
Wireshakr抓包界面
说明:数据包列表区中不同的协议使用了不同的颜色区分。协议颜色标识定位在菜单栏视图--> 着色规则如下所示
WireShark 主要分为这几个界面
1. Display Filter(显示过滤器), 用于设置过滤条件进行数据包列表过滤。菜单路径:Analyze --> Display Filters。
2. Packet List Pane(数据包列表), 显示捕获到的数据包,每个数据包包含编号,时间戳,源地址,目标地址,协议,长度,以及数据包信息。 不同协议的数据包使用了不同的颜色区分显示。
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协议
初学者使用wireshark时,将会得到大量的冗余数据包列表,以至于很难找到自己自己抓取的数据包部分。wireshar工具中自带了两种类型的过滤器,学会使用这两种过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。
(1)抓包过滤器
捕获过滤器的菜单栏路径为捕获--> 捕获过滤器。用于在抓取数据包前设置。
如何使用?可以在抓取数据包前设置如下。
捕获--> 选项
ip host 172.21.161.4 and icmp表示只捕获主机IP为172.21.161.4的ICMP数据包。获取结果如下:
(2)显示过滤器
显示过滤器是用于在抓取数据包后设置过滤条件进行过滤数据包。通常是在抓取数据包时设置条件相对宽泛,抓取的数据包内容较多时使用显示过滤器设置条件顾虑以方便分析。同样上述场景,在捕获时未设置捕获规则直接通过网卡进行抓取所有数据包,如下
执行ping www.baidu.com获取的数据包列表如下
观察上述获取的数据包列表,含有大量的无效数据。这时可以通过设置显示器过滤条件进行提取分析信息。ip.addr == 172.21.161.4。并进行过滤。
上述介绍了抓包过滤器和显示过滤器的基本使用方法。在组网不复杂或者流量不大情况下,使用显示器过滤器进行抓包后处理就可以满足我们使用。下面介绍一下两者间的语法以及它们的区别。
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 172.21.161.4
src host 172.21.161.4
dst host 172.21.161.4
(3)端口过滤
port 80
src port 80
dst port 80
(4)逻辑运算符&& 与、|| 或、!非
src host 172.21.161.4 && dst port 80 抓取主机地址为192.168.1.80、目的端口为80的数据包
host 172.21.161.4 || host 192.168.1.102 抓取主机为172.21.161.4或者192.168.1.102的数据包
!broadcast 不抓取广播数据包
2、显示过滤器语法和实例
(1)比较操作符
比较操作符有== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于。
(2)协议过滤
比较简单,直接在Filter框中直接输入协议名即可。注意:协议名称需要输入小写。
tcp,只显示TCP协议的数据包列表
http,只查看HTTP协议的数据包列表
icmp,只显示ICMP协议的数据包列表
(3) ip过滤
ip.src ==172.21.161.4 显示源地址为172.21.161.4的数据包列表
ip.dst==172.21.161.4, 显示目标地址为172.21.161.4的数据包列表
ip.addr == 172.21.161.4 显示源IP地址或目标IP地址为 172.21.161.4的数据包列表
(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地址为172.21.161.4的ICMP数据包表达式为ip.addr == 172.21.161.4 and icmp
(7)按照数据包内容过滤。假设我要以IMCP层中的内容进行过滤,可以单击选中界面中的码流,在下方进行选中数据。如下
右键单击选中后出现如下界面
选中Select后在过滤器中显示如下
后面条件表达式就需要自己填写。如下我想过滤出data数据包中包含"abcd"内容的数据流。包含的关键词是contains 后面跟上内容。
至此,便学习了wireshark基础的应用。
先来讲一下什么是arp包,ARP(Address Resolution Protocol)即地址解析协议,其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
以主机A(172.21.53.45)向主机B(172.21.53.254)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询 问:“172.21.53.254的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“172.21.53.254的MAC地址是(00-BB-00-62-C2-02)”。 这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。
接下来看看arp缓冲表,打开计算机的运行,输入cmd,回车
输入arp -a
那我们就去ping一个arp表中没有的IP,在cmd中ping 172.21.53.254,接下来是操作步骤。
[if !supportLists](1)[endif]打开软件,选择“捕获”-“选项”-“以太网”-“开始”
[if !supportLists](2)[endif]此时会有海量的数据包,为了便于分析,我们使用过滤器输入“arp”以筛选出arp报文。
[if !supportLists](3)[endif]打开dos窗口,输入ping 172.21.53.254
[if !supportLists](4)[endif]在wireshark中抓包,找到这个包
[if !supportLists](5)[endif]但是选取以下的发送和接收的报文进行分析,arp一次请求由广播的请求报文和单播的应答报文组成,所以这一组报文的源MAC地址和目的MAC地址是对调的。可以看一下Info的信息很有意思,请求报文广播说“谁有172.21.53.254的mac地址?告诉172.21.53.45吧!”,响应的报文对请求的地址单播说“172.21.53.254的mac地址是00:3c:10:50:0a:e6”
[if !supportLists](6)[endif]下面的Address ResolutionProtocol就是arp协议,这个报文是请求包,因为目标的MAC地址是全0
[if !supportLists](7)[endif]具体的字段解释如下,源IP是172.21.53.45,目的IP是172.21.53.254,但是不知道具体的目的地的mac地址。
[if !supportLists](8)[endif]以下是响应包的内容
它在响应包里面把mac地址补全,单播发给了源地址172.21.53.45
(9)回到dos窗口,输入arp -a,可以看到172.21.53.254的mac地址已经记录在ARP缓存表了。
同样,先来了解一下什么是ICMP?
(1)ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议。用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息尽管并不传输用户数据。可是对于用户数据的传递起着关键的数据。
(2)ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。
(3)ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。
[if !supportLists](4)[endif]我们现在就来抓取报文,打开dos窗口,在里面输入ping www.baidu.com
[if !supportLists](5)[endif]打开wireshark,在filter栏中输入 ip.addr ==172.21.53.45(自己的IP地址) and icmp
[if !supportLists](6)[endif]能够看到windows下ping默认运行4次ping程序,wireshark抓到8个ICMP查询报文,向对方主机询问(request)四次同时接收到四次应答(reply),这样加起来一共就有八个.
[if !supportLists](7)[endif]具体看一次请求和应答过程首先先看一个包的格式,由下图可知,报文由IP首部和ICMP报文组成,先看下IP包的首部和大
[if !supportLists](8)[endif]下图红色横线部分为IP首部,共20字节
[if !supportLists](9)[endif]下图箭头所指向的为ICMP报文,共40字节
[if !supportLists](10)[endif]ICMP报文的具体格式
[if !supportLists](11)[endif]由此可以看到刚才的截图
Type:8
Code:0
Checksum:0x4cbf
通过查询ICMP报文类型可知,Type为8的包为 回射请求(Ping请求)
使用相同的方法,查看Echo (ping) reply包,得到type类型为0
通过查询ICMP报文类型可知,Type为0的包为 回射应答(Ping应答)