在使用wireshark抓包的时候,总是会抓到一些无关的包,我们可以使用过滤器来筛选抓包结果,方便分析。
在此记录下常用的过滤语法,方便回顾。
过滤器中常用的比较符号:
英文写法: | C语言写法: | 含义: |
eq | == | 等于 |
ne | != | 不等于 |
gt | > | 大于 |
lt | < | 小于 |
ge | >= | 大于等于 |
le | <= | 小于等于 |
逻辑符号:
英文写法: | C语言写法: | 含义: |
and | && | 逻辑与 |
or | || | 逻辑或 |
not | ! | 逻辑非 |
contains | 包含 | |
matches |
模糊匹配 |
匹配中使用的特殊符号:
写法 | 含义: |
\d | 0-9的数字 |
\D | \d的补集(以所以字符为全集,下同),即所有非数字的字符 |
\w | 单词字符,指大小写字母、0-9的数字、下划线 |
\W | \w的补集 |
\s | 空白字符,包括换行符\n、回车符\r、制表符\t、垂直制表符\v、换页符\f |
\S | \s的补集 |
. | 除换行符\n外的任意字符。 在Perl中,“.”可以匹配新行符的模式被称作“单行模式” |
.* | 匹配任意文本,不包括回车(\n)? 。 而,[0x00-0xff]* 匹配任意文本,包括\n |
[] | 匹配[]内所列出的所有字符 |
[^] | 匹配非[]内所列出的字符 |
^ | 表示其后的字符必须位于字符串的开始处 |
$ | 表示其前面的字符必须位于字符串的结束处 |
\b | 匹配一个单词的边界 |
\B | 匹配一个非单词的边界 |
个人认为使用过滤器查询可以分为两种情况:参数查询、值查询;
参数查询
是指匹配查询各类协议中参数的情况,例如:
ip.src == 10.2.3.129 and ip.dst == 10.2.3.129 源、目的 IP地址查询
tcp.port == 8080 tcp端口查询
udp.length == 8 udp数据包长度查询
可以用协议名过滤协议种类
tcp icmp udp 等
eth.src == A0:00:00:04:C5:84 过滤数据包来源MAC地址
值查询
值匹配包体中内容的情况,例如:
tcp contains origtotalamount 匹配tcp包体中包含origtotalamount字符串的数据包
tcp[32:14] contains "03S" 在tcp协议中的第32个字节开始截取14个字节,其中包含字符03S的数据包
tcp[32:14] matches "S" 在tcp协议中的第32个字节开始截取14个字节,其中模糊匹配字符S的数据包
tcp[32:14] matches "S$" 在tcp协议中的第32个字节开始截取14个字节,其中模糊匹配字符S并以S字符结尾 的数据包
tcp[43:3] matches "\\d\\d\\w" 在tcp协议中的第43个字节开始截取3个字节,匹配两个0-9数字以及一个单词字符