前言
年底工作太忙了,去它的降本增效……终于抽出那么点时间更新博客了。好不容易有一点时间休息,竟然第一时间想到的是更新博客……今天准备把Wireshark过滤器内容写了,这个内容算是Wireshark工具使用的最核心内容之一。构思了好长时间,其实官网文档写得相当详细,但又总觉得差了些什么,所以还是自己写吧(目标就是让大家看完这篇文章,能真正掌握Wireshark过滤技术)。这部分内容可能相对枯燥,但这是你迈向数据包分析精英的必经之路。所以我构思的文章内容包括了4个章节:过滤器介绍(概念、原理、分类)+ 过滤语句编写(基础语法)+ 过滤器使用举例(实践)+ 高级过滤技巧(提升)。几个章节加在一起,即让大家熟悉工具的使用,又能够解决实际工作中的问题。不废话了,万字长文献上:
一、了解Wireshark过滤器概念、原理及分类
首先来看看Wireshark是如何捕获到数据包的:
如上图:
(1)如果是在网络拓扑中间的网元设备上抓包,为了不影响生产环境,我们一般是在交换机上做端口镜像,复制一份流量到分析主机的网卡;
如果是在网络终端设备上抓包(终端设备直接安装Wireshark),则无需做镜像,直接选择网卡进行抓包即可(网卡需设置为混杂模式)。
(2)还记得我们第二篇介绍Wireshark安装的文章吗?在安装时,有个步骤是提示你需要安装npcap(winpcap),Linux系统是安装libpcap。这是一个抓包工具(或者说是抓包驱动、数据包分析库)。可以认为它才是真正负责抓包的工具,然后再把包给到Wireshark来进行分析。
(3)考虑一个场景:如果网络流量特别大,对于分析主机来说(一般是千兆或百兆网卡)极大可能是吃不消的。这时不要说用Wireshark分析了,要把包接下来都困难。这时,我们就只能选择性放弃一些我们不关注的数据包,只抓需要的数据包,来减小流量过大给分析主机带来的负担。这时,我们就要对流量进行“过滤”处理,如上图中标注的漏斗:“捕获过滤”,它将流量进行初步筛选。
这就引出了我们这篇文章的主角——过滤器!
Wireshark的过滤器分为了两种:捕获过滤器 和 显示过滤器
上面我做引入时提到的是捕获过滤器。那显示过滤器又是什么呢?虽然我们已经对流量进行了初步筛选,但实际大家在抓包时会发现,1秒钟时间还是可能会抓到成千上万个数据包!如果抓包时间长,数据包的量级可能是百万、千万甚至上亿的……那我们在分析时,要找到指定的某个数据包无疑就像是大海捞针。这时“显示过滤器”就显得格外重要了,它能将我们想分析的数据包在Wireshark中显示出来,把不想分析的数据包暂时进行隐藏!
因此,我们在使用Wireshark分析时,更多使用的是显示过滤器。
特别需要说明的是:Wireshark的捕获过滤器和显示过滤器使用的是2套不同的语法……
究其原因,就是前面提到的:捕获过滤器只是在流量大的场景下才会去使用,因此Wireshark认为捕获过滤直接用BPF(Berkley Packet Filter)进行过滤就行了。BPF的语法相对简单直接,但不能满足复杂的过滤场景。(BPF诞生于1992年,你说它能多先进,甚至都算拖拉机了……但现在eBPF倒是在云计算领域火得一塌糊涂(不在本文讲解范围,感兴趣可以自行问度娘))。
显示过滤器语法就不一样了,分析师需要根据各种不同的分析场景对已捕获的数据包进行筛选,这就对过滤器提出了高要求,因此Wireshark在BPF的基础上自主开发了一套更加复杂、灵活的过滤语法,来应对各种苛刻的过滤场景。(那直接捕获过滤也用显示过滤的语法呗?是啊,老外就是倔强,你说搞两套语法,费这事干嘛……)
这里就不得不提一下国产的科来。科来推崇的是“全流量”,简单说就是所有历史流量都捕获下来(所以平时在行里用科来的产品基本没涉及捕获过滤)。科来的过滤器有三种:分析(就是捕获,叫法不同)、显示和存储过滤器,都是用的同一套语法。和Wireshark显示过滤器语法很像,但又有不同(就像思科和华为路由器的配置语句……)。写完这篇文章,我转载科来的过滤器系列文章(他们竟然写了一个系列……当然他们是拿工资,我写Wireshark是用爱发电……),大家感兴趣的话可以深入了解一下。给我的总体感觉是科来过滤器功能不如Wireshark强大(比如Wireshark可以过滤有多层IP嵌套这种场景),但是,科来有些过滤条件设置更简单,还可以针对端点、会话和日志等进行过滤,Wireshark就只能过滤单数据包。国产软件能和Wireshark掰手腕,也算是有实力,侧面也看到新世纪以来东大真的是越来越强了。
好了,不扯远了。相信大家已经清楚了什么是过滤器,也知道了过滤器分类,下面正式进入过滤器使用介绍。
二、过滤语句编写
还是用官方介绍开头:英语还行的,我建议大家完整阅读一下官方用户手册,毕竟官方最权威,翻译后传来传去,难免会出错。我写这篇文章,用的是Ver4.5.0版本,官方用户手册第4.10节介绍捕获过滤器,而6.3节开始时介绍显示过滤器:
我尽量把官网文档的精华提取出来讲。先来看分析过滤器,再来学显示过滤器:
(一)捕获过滤器
捕获过滤器的位置: