Wireshark是一个很好用的sniffer工具,插件十分强大。有时,为了判断问题,在日常工作中也会用到一些,现在记录一部分常用的过滤规则:
1、运算符
lt | < | 小于 |
le | <= | 小于等于 |
eq | == | 等于 |
gt | > | 大于 |
ge | >= | 大于等于 |
ne | != | 不等 |
and | && | 与操作 |
or | || | 或操作 |
not | ! | 非操作 |
2、ip、mac和port过滤
#过滤ip地址为192.168.1.102的全部数据包 ip.addr eq 192.168.1.102 #过滤从192.168.1.102发来的数据包 或 发往192.168.1.102的数据包 ip.src eq 192.168.1.102 or ip.dst eq 192.168.1.102 #过滤MAC地址为00:00:00:01:02:03的所有包 eth.add eq 00:00:00:01:02:03 #过滤MAC地址为00:00:00:01:02:03发送的包 或 发往00:00:00:01:02:03的包 eth.src eq 00:00:00:01:02:03 or eth.dst eq 00:00:00:01:02:03 #过滤8080端口全部tcp数据包(接收和发送) tcp.port eq 8080 #过滤8080端口发送的全部tcp数据包 或 发送到8080端口全部tcp数据包 tcp.srcport eq 8080 or tcp.dstport eq 8080 #过滤21端口全部udp数据包(接收和发送) upd.port eq 21 #过滤21端口发送的全部udp数据包 或 发送到21端口全部udp数据包 udp.srcport eq 21 or udp.dstport eq 21 #过滤1024以内端口数据包 tcp.port <= 1024 #去掉tcp数据包 !tcp #或 not tcp
3、包长度过滤
#udp报文长度等于100 udp.length eq 100 #udp数据长度等于92 udp.len eq 92 #经常可以用到eth(farme),ip,arp,tcp,udp等协议的包长度 #注意区分包长度和payload长度
4、HTTP协议
#过滤GET方法的HTTP数据包 http.request.method == "GET" #按URI过滤HTTP数据包 http.request.uri == "/image/logo.gif" #按内容过滤HTTP数据包 http contains "Content-Type: application/dicom"
5、匹配规则
\d | 0-9的数字 |
\D | \d的补集 |
\w | 单词字符,即大小写字母、0-9的数字、下划线 |
\W | \w的补集 |
\s | 空白字符,包括换行符\n、回车符\r、制表符\t、垂直制表符\v、换页符\f |
\S | \s的补集 |
. | 除换行符\n外的任意字符 |
.* | 匹配任意文本 |
[…] | 匹配[]内所列出的所有字符 |
[^…] | 匹配非[]内所列出的字符 |
^ | 表示其后的字符必须位于字符串的开始处 |
$ | 表示其前面的字符必须位于字符串的结束处 |
\b | 匹配一个单词的边界 |
\B | 匹配一个非单词的边界 |
{n} | 匹配前面的字符n次 |
{n,} | 匹配前面的字符n次或多于n次 |
{n,m} | 匹配前面的字符n到m次 |
? | 匹配前面的字符0或1次 |
+ | 匹配前面的字符1次或多于1次 |
* | 匹配前面的字符0次或式于0次 |
6、包匹配
#字节匹配,比如匹配payload第一个字节0x14的UDP数据包 udp[8]==14 #范围匹配,经常使用到tcp[offset,n],比如匹配payload的前4个字节0x0004002a udp[8:4]==00:04:00:2a #正则匹配,要用match,比如匹配HTTP1.1协议的数据包 tcp[20:] matches "^GET [ -~]*HTTP/1.1\\x0d\\x0a"
7、示例
#DICOMClient 上抓取 DICOMServer ip.dst eq 服务端ip && tcp.port eq 104 #DICOMServer 上抓取 DICOMClient tcp.port eq 104 #HL7v2Client 上抓取 HL7v2Server ip.dst eq 服务端ip && tcp.port eq 3306 #HL7v2Server上抓取 HL7v2Client tcp.port eq 3306