Wireshark网络分析从入门到实践
上QQ阅读APP看书,第一时间看更新

Wireshark 的显示过滤器与捕获过滤器有两点明显的不同,一是显示过滤器可以在Wireshark捕获数据之后再使用,二是显示过滤器的语法与捕获过滤器的语法并不相同。

Wireshark的显示过滤器可以根据定义的协议字段名称来定位和显示特定的数据包。我们可以通过一些选项来确定协议字段名称,这样就可以创建各种简单或者复杂的显示过滤器。在Wireshark中有多种创建显示过滤器的方法。

在 Wireshark 中,在显示过滤器中使用网络协议时,这些网络协议都要使用小写的形式(例如arp、ip、icmp、tcp、udp、dns以及http等)。例如我们创建一个只显示TCP协议的显示过滤器,只需要在Wireshark的显示过滤器的输入框中输入“tcp”,如图2-6所示。

图2-6 一个设置好的显示过滤器

Wireshark过滤器输入框还带有一个自动查找(联想)功能,它会列出可以在显示过滤器输入的协议字段,例如我们在这里面输入tcp,就会显示出所有以tcp开始的协议字段,如图2-7所示。

图2-7 显示过滤器的自动查找功能

我们也可以使用Wireshark过滤器输入框右侧的“表达式”按钮,单击这个按钮之后就可以查看到Wireshark显示过滤器的表达式对话窗口(见图2-8)。

图2-8 Wireshark的显示过滤器表达式对话窗口

这个表达式对话窗口中一共包含了“字段名称”“关系”“值”和“预定义的值”4个部分,每个部分的含义如下所示。

(1)字段名称:这里列出了Wireshark中支持的各种协议以及它们的子类。

(2)关系:这里列出了Wireshark中可以使用的各种运算符。Wireshark中支持比较和逻辑两种运算符。这两种运算符大部分都有两种写法,例如“eq”等同于“==”,“ne”等同于“!=”,“gt”等同于“>”,“lt”等同于“<”,“ge”等同于“>=”,“le”等同于“<=”,同时“and”等同于“&&”,“or”等同于“||”,“not”等同于“!”。还有两个比较特殊的字符“contains”和“matches”,contains用来判断是否包含一个值,matches用来判断是否匹配一个表达式。

(3)值:用户可以根据自己的过滤需求在这里输入内容。

(4)预定义的值:这里面列出了当前选中协议常使用的值。

利用这个Wireshark过滤器表达式对话窗口,我们就可以轻松地创建一个显示过滤器。这个显示过滤器的作用是只保留发往“www.baidu.com”的request数据包。要创建这个表达式,可以按照如下的步骤来进行。

(1)首先在“字段名称”列表中选中要使用的协议,例如我们现在要使用的就是HTTP协议,这个协议包含了很多子类,单击HTTP左侧的三角按钮就可以展开显示这些子类(见图2-9)。

图2-9 在Wireshark展开的HTTP协议内容

(2)在子类中找到我们需要的子类,在这里要一个表示发往特定地址的request类型,也就是“http.request.full_uri”。

(3)找到了所需的子类之后,在“关系”列表中选中需要使用的关系运算符。本例使用“==”作为运算符。

(4)在“值”文本框中输入“www.baidu.com”,这样在最下方就产生了一个基于刚才选择所得到的显示过滤器(见图2-10)。

图2-10 一个设置好的显示过滤器

到现在为止,我们已经完成了一个显示过滤器,单击OK就可以将这个过滤器应用到Wireshark中了。

初学者很难掌握“字段名称”中那数以百计的选项,不过Wireshark中提供了一种简单的创建显示过滤器的方法,就是以某个数据包的特性来作为过滤器。你只需要查看数据包的详细信息,如果你想使用其中一行作为过滤器,但是又不知道该使用什么来作为这个过滤器的时候,就可以使用下面的方法。

首先在数据包列表处选中一个数据包,然后在数据包详细信息栏处查看这个数据包的详细内容,这里会以行的形式展示数据包的信息,当我们选中其中一行时(见图2-11),例如IP地址,那么在状态栏处就会显示出该数据包该行对应的过滤器表达式。

图2-11 在状态栏处显示的过滤器表达式

另外还有一种更为直接的方法,就是在数据包详细列表处的某一行单击,例如我们在Source:116.211.186.209这一行单击鼠标右键的话,就会弹出一个菜单,这个菜单中选中“作为过滤器应用”,会弹出一个新的菜单,如图2-12所示。

图2-12 作为过滤器应用

如果我们希望使用选中的Source:116.211.186.209作为过滤器的话,那么可以单击“选中”,这样就会产生并自动应用一个新的显示过滤器“ip.src == 192.168.1.102”。同样,如果我们希望过滤掉这种数据包的话,可以点击“非选中”,那么产生并应用的过滤器就是!(ip.src == 192.168.1.102)。

如果希望同时满足“ip.src == 192.168.1.102”和当前显示过滤显示器这两个条件的话,可以点击“…与选中(A)”。例如原来的条件为ip.proto == 17,那么这样操作的结果就是(ip.proto == 17)&&((ip.src == 192.168.1.102)。