wireshark显示过滤器和捕获过滤器

本文简单聊一聊wireshark显示过滤器和捕获过滤器的使用。

wireshark过滤器分为两种,显示过滤器和捕获过滤器。显示过滤器指的是针对已经捕获的报文,过滤出符合过滤规则的报文;捕获过滤器指的是提前设置好过滤规则,只捕获符合过滤规则的报文。往往初次接触wireshark,可能会分不清这两种过滤规则,本文就简单说明一下。

为什么wireshark使用两套过滤器规则呢?原因在于wireshark使用winpcap或者libpcap第三方的报文捕获库来对网卡的报文进行捕获,因此捕获过滤器就沿用了这些第三方库提供的捕获过滤出规则。但是对于已经捕获报文的解析和处理,wireshark本身构建了一套新的过滤规则,显示过滤器。显示过滤器比之捕获过滤器要强大许多,在报文分析的过程中经常使用到,因此有必要了解下。

关于wireshark显示过滤器,在wireshark的官网中,其实给出了很多简单易懂的示例,见这里,当然更为全面和详细的语法解释,见这里

当然所有的规则都可通过点击右上角的表达式查看,如下图:
wireshark显示过滤器和捕获过滤器

上述这些规则,其实没有必要的死记硬背,因为后面会讲述在实际分析报文过程中如何快速的过滤出特定的报文,但是简单的了解还是有必要的。因此以几个常见的例子先加以说明:

1,过滤特定端口的报文:tcp.port eq 80 , 不管端口是源端口还是目的端口都显示,因此如果是过滤源端口,则是tcp.srcport eq 80;如果是目的端口,则是tcp.dstport eq 55332 这种形式。

2,长度过滤,过滤具具有有效载荷的tcp报文,规则为tcp.len >0,表示tcp生成没有数据。如果是UDP报文则是形如udp.length == 26 ,这个长度是指udp本身固定长度8加上udp下面那块数据包之和。如果想过滤IP长度则是 ip.len == 94 形式,表示除了以太网头固定长度14,其它都算是ip.len,即从ip本身到报文末尾的总长度。frame.len == 119 表示整个数据包长度,从eth开始到报文末尾的总长度。

上述是体现wireshark显示过滤器优秀的地方,不止能够过滤协议的定义字段,例如udp.length ;还提供了额外丰富的字段供使用,比如tcp.len。关于比较字符的使用罗列如下:

eq,== 等于
ne,!= 不等于
gt,> 比…大
lt,< 比…小 ge,>= 大于等于
le,<= 小于等于

4,如果过滤源IP的数据报文:ip.src eq 192.168.1.107 ,目的则是形如ip.dst eq 192.168.1.107 ,不区分源和目的则是ip.addr eq 192.168.1.107 。MAC层地址的过滤是同样的道理。

5,过滤包含特定字符串域名的报文,形如http.host contains “moe”。

8,多个过滤条件的使用,例如同时满足http以及且端口为80的过滤规则 http && tcp.port == 80,关于组合符号有and&& 且 or,||,或 not,! 取反这几种。

9,查询数据包的内容,可以使用ctrl + F直接搜索,也可以使用规则:
例如判断UDP的数据部分三个字节是否等于0x20 0x21 0x22,规则为udp[8:3]20:21:22,表示偏移8个bytes,再取3个数,是否与后面的数据相等。如果判断TCP数据包的前三个字节是否等于0x20 0x21 0x22,则是tcp[20:3]==20:21:22,tcp一般情况下,头部长度为20,但也有不是20的时候,如果想得到最准确的,应该先知道tcp长度。
具体规则是:
tcp[20]表示从20开始,取1个字符
tcp[20:]表示从20开始,取1个字符以上
tcp[20:8]表示从20开始,取8个字符

10,关于正则,主要是在字符串匹配的会用到,正则的形式可以参考wireshark官方的文档,不在赘述。

通过上述的介绍,你可能会觉得记不住这么多的规则。在实际在分析报文的过程中都是如下图操作:
wireshark显示过滤器和捕获过滤器

选中想要过滤的报文属性->右击->作为过滤器应用->选中,这个时候,过滤器那一栏就会出现想要的过滤规则,在此基础上就行修改即可。了解前面的规则就是为了知道如何修改。

关于wireshark捕获过滤器,在wireshark的官网中,其实给出了很多简单易懂的示例,见这里,当然更为全面和详细的语法解释,见这里。可以看到这个已经是第三方网站提供的了。

罗列一些简单的示例:

1,过滤指定端口规则:port 80

2,过滤指定IP规则:host 192.168.0.115

3,过滤指定域名规则:host www.example.com

实际使用过程中如下图:

wireshark显示过滤器和捕获过滤器

可以看到捕获过滤器的规则是host 192.168.0.115 and tcp port 8080,而对应的显示过滤器规则是ip.addr eq 192.168.0.115 and tcp.port eq 8080,两者的语法还是不同的。

上述就是简单的对于显示过滤器和捕获过滤器的说明,在使用wireshark的时候要加以区分。