Yuhang Zheng

Wireshark显示过滤表达式介绍

N 人看过

显示过滤表达式介绍

显示过滤器表达式作用在在wireshark捕获数据包之后,从已捕获的所有数据包中显示出符合条件的数据包,隐藏不符合条件的数据包。

显示过滤表达示在工具栏下方的“显示过滤器”输入框输入即可生效。

img

基本过滤表达式

一条基本的表达式由过滤项、过滤关系、过滤值三项组成。

比如ip.addr == 192.168.1.1,这条表达式中ip.addr是过滤项、==是过滤关系,192.168.1.1是过滤值(整条表达示的意思是找出所有ip协议中源或目标ip、等于、192.168.1.1的数据包)

过滤项

初学者感觉的“过滤表达式复杂”,最主要就是在这个过滤项上:一是不知道有哪些过滤项,二是不知道过滤项该怎么写。

这两个问题有一个共同的答案—–wireshark的过滤项是“协议“+”.“+”协议字段”的模式。以端口为例,端口出现于tcp协议中所以有端口这个过滤项且其写法就是tcp.port。

推广到其他协议,如eth、ip、udp、http、telnet、ftp、icmp、snmp等等其他协议都是这么个书写思路。当然wireshark出于缩减长度的原因有些字段没有使用协议规定的名称而是使用简写(比如Destination Port在wireshark中写为dstport)又出于简使用增加了一些协议中没有的字段(比如tcp协议只有源端口和目标端口字段,为了简便使用wireshark增加了tcp.port字段来同时代表这两个),但思路总的算是不变的。而且在实际使用时我们输入“协议”+“.”wireshark就会有支持的字段提示(特别是过滤表达式字段的首字母和wireshark在上边2窗口显示的字段名称首字母通常是一样的),看下名称就大概知道要用哪个字段了。wireshark支持的全部协议及协议字段可查看官方说明

过滤关系

过滤关系就是大于、小于、等于等几种等式关系,我们可以直接看官方给出的表。注意其中有“English”和“C-like”两个字段,这个意思是说“English”和“C-like”这两种写法在wireshark中是等价的、都是可用的。

img

过滤值

过滤值就是设定的过滤项应该满足过滤关系的标准,比如500、5000、50000等等。过滤值的写法一般已经被过滤项和过滤关系设定好了,只是填下自己的期望值就可以了。

复合过滤表达示

所谓复合过滤表达示,就是指由多条基本过滤表达式组合而成的表达示。基本过滤表达式的写法还是不变的,复合过滤表达示多出来的东西就只是基本过滤表达示的“连接词”

我们依然直接参照官方给出的表,同样“English”和“C-like”这两个字段还是说明这两种写法在wireshark中是等价的、都是可用的。

img

常见用显示过滤需求及其对应表达式

按通信模型模型示例:

数据链路层:

筛选源或者目的mac地址为04:f9:38:ad:13:26的数据包
eth.addr == 04:f9:38:ad:13:26

筛选目的mac地址为04:f9:38:ad:13:26的数据包
eth.dst == 04:f9:38:ad:13:26

筛选源mac地址为04:f9:38:ad:13:26的数据包
eth.src == 04:f9:38:ad:13:26

网络层:

筛选ip地址为192.168.1.1的数据包
ip.addr == 192.168.1.1

筛选192.168.1.1和192.168.1.2之间的数据包
ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2

筛选从192.168.1.1到192.168.1.2的数据包
ip.src == 192.168.1.1 && ip.dst == 192.168.1.2

传输层:

筛选tcp协议的数据包
tcp

筛选除tcp协议以外的数据包
!tcp

筛选端口为80的数据包,包括源端口和目的端口
tcp.port == 80

筛选源端口为80的数据包
tcp.srcport == 80

筛选目的端口为80的数据包
tcp.dstport == 80

筛选12345端口和80端口之间的数据包
tcp.port == 12345 && tcp.port == 80

筛选从12345端口到80端口的数据包
tcp.srcport == 12345 && tcp.dstport == 80

应用层:

特别说明,在http中:
http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1)
http.response表示响应头中的第一行(如HTTP/1.1 200 OK)
其他头部都用http.header_name形式。

筛选url中包含.php的http数据包
http.request.uri contains “.php”

筛选内容包含username的http数据包
http contains “username”

筛选使用“GET”方法请求的数据包
http.request.method==”GET”

简单示例:

筛选目标ip地址为119.249.21.123,并且tcp协议目标端口为5678的http协议的请求方式为“POST”的数据包:
ip.dst_host == 119.249.21.123 && tcp.dstport == 5678 && http.request.method == “POST”

PS.
wireshark中根据MAC地址/物理地址过滤数据包,捕获过滤和显示过滤的语法如下:

wireshark捕获过滤中过滤MAC地址/物理地址
ether host 80:f6:2e:ce:3f:00 //过滤目标或源地址是80:f6:2e:ce:3f:00的数据包
ether dst host 80:f6:2e:ce:3f:00 //过滤目标地址是80:f6:2e:ce:3f:00的数据包
ether src host 80:f6:2e:ce:3f:00 //过滤源地址是80:f6:2e:ce:3f:00的数据包

wireshark显示过滤中过滤MAC地址/物理地址
eth.addr== 80:f6:2e:ce:3f:00 //过滤目标或源地址是80:f6:2e:ce:3f:00的数据包
eth.src== 80:f6:2e:ce:3f:00 //过滤源地址是80:f6:2e:ce:3f:00的数据包
eth.dst== 80:f6:2e:ce:3f:00 //过滤目标地址是80:f6:2e:ce:3f:00的数据包