wireshark过滤器语法全面解析

1. 概述

本文全面介绍了wireshark过滤器语法,wireshark包括捕获过滤器和显示过滤器,其中显示过滤器的语法十分丰富,其实显示过滤器的语法可以简单概括为:基本数据类型,协议对象,比较运算符,结合运算符,字符串函数与正则表达式,这就是其所有语法。其中高级的用法也许是切片、集合、正则表达式。

本文重点在于全面的描述其基本语法,通过例子来学习,那些复杂的用法其实都来自这些基本的语法元素,如有不完善之处,欢迎提出建议。

2. 过滤器分类

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

  • 捕获过滤器:决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。是第一层过滤器,防止日志过大。
  • 显示过滤器:在捕捉结果中进行详细查找。语法与捕获过滤器不一样

3. 捕获过滤器

语法与tcpdump、Windump以及任何使用libpcap库的程序一样

这里我只介绍显示过滤器,捕获过滤器在我的另一篇文章写得很详细全面介绍Linux下tcpdump的使用

4.显示过滤器基本数据类型

4.1 无符号整数与有符号整数

可以用10、8、16进制表示

ip.len le 1500  // 10进制
ip.len le 02734 // 8进制
ip.len le 0x5dc // 16进制

4.2 布尔值

协议对象的boolean域为真当且仅当解码后有该字段

例:
tcp.flags.syn为真当且仅当SYN标志出现在TCP段中

4.3 以太网地址

用冒号(:),句号(.),横杠(-)分隔,例:

eth.dst == ff:ff:ff:ff:ff:ff
eth.dst == ffff.ffff.ffff
eth.dst == ff-ff-ff-ff-ff-ff

4.4 IPv4地址

ip.addr == 192.168.0.1

或CIDR表示法

ip.addr == 129.111.0.0/16 // 过滤器将查找129.111 B类网络中的所有数据包

4.5 IPv6地址

ipv6.addr == ::1

4.6文本字符串

http.request.uri == "https://www.wireshark.org/"

sip.To contains "a1762"

http.host matches "acme\.(org|com|net)"

5. 显示过滤器

5.1 协议对象

protocol.attr.attr

wireshark自带很多协议解码器,打开搜索栏>表达式即可看到大量协议

5.2 比较运算符

C风格英文描述
==eq
!=ne官方不推荐在eth.addr, ip.addr, tcp.port, udp.port上使用,因为有bug
<lt
<=le
>gt
>=ge
contains协议,字段或偏移包含值,sip.To contains “a1762”
matches~协议或文本符合perl正则语法:http.host matches "acme.(org
bitwise_and&二进制与,比较二进制的值:tcp.flags & 0x02

5.3 结合运算符

英文格式C风格描述
and&&
or||
xor^^异或
not!
[]切片(偏移)
in成员运算符,存在于集合
()括号内优先级更高

5.3.1 切片

  • n:m n是起始偏移量,m是指定范围的长度。
eth.src [0:3] == 00:00:83
  • n-m n是起始偏移量,m是结束偏移量
eth.src [1-2] == 00:83
  • :m 相当于0:m,即从序列的开头到偏移量m
eth.src [:4] == 00:00:83:00
  • n: 从偏移量n到序列末尾
eth.src [4:] == 20:20
  • n 相当于n:1
eth.src [2] == 83
  • 复合范围:通过逗号分隔将单个范围串在一起
eth.src [0:3,1-2,:4,4:,2] == 00:00:83:00:83:00:00:83:00:20:20:83

5.3.2 成员运算符(集合)

tcp.port in {80 443 8080}
// 等价于
tcp.port == 80 || tcp.port == 443 || tcp.port == 8080
  • 集合范围
tcp.port in {443 4430..4434}
// 等价于
tcp.port == 443 || (tcp.port >= 4430 && tcp.port <= 4434)
  • 不仅限于数字,也可以使用其它类型
http.request.method in {"HEAD" "GET"}
ip.addr in {10.0.0.5 .. 10.0.0.9 192.168.1.1..192.168.1.9}
frame.time_delta in {10 .. 10.5}

5.4 字符串函数

函数介绍
upper转换string为大写
lower转换string为小写
len返回string或字节字段的字节长度,注意是按字节而不是字符(可能多字节)
count返回字符串在帧(frame)中出现次数
string将非字符串转换成字符串

例:

lower(http.server) contains "apache"
len(http.request.uri) > 100

5.5 正则表达式

采用perl的正则表达式语法

ip.dst_host matches "^172\.(1[6-9]|2[0-9]|3[0-1])\..{1,3}\.255"

6. 常见例子

  • 显示来自10.210网段的封包
ip.src == 10.210.0.0/16	
  • 显示GET请求
http.request.method == “GET”

7. 附录

7.1 参考资料

强烈推荐阅读

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值