wireshark 过滤规则
- 捕获
最简单的一个例子:
host 10.21.11.86 and 10.21.11.38
用来只抓取这两台主机之间的数据包
例子:
以太网地址例子:抓取网络地址 08:00:08:15:ca:fe 上所有流入流出的数据包
ether host 08:00:08:15:ca:fe IP地址例子:抓取IP地址 192.168.0.10 上所有流入流出的数据包
host 192.168.0.10
协议例子:抓取 80 端口上的所有流入流出的TCP协议的包。
tcp port 80
组合例子:抓取 192.168.0.10 上除 http 之外的所有流入流出的数据包
host 192.168.0.10 and not tcp port 80 注意:如果用了抓取TCP/IP数据包的关键字”host”、”port”,结果将是忽略所有ARP数据包。
捕获过滤用语法
[x] x 为可选内容
a|b 选 a 或 b
<x> x 为必选
xyz xyz 为关键字,不可改变,必需。
[not] primitive [and|or [not] primitive …]
与、或、非 = and、or、not
A primitive is simply one of the following: [src|dst] host <host>
尖括号里的是一个主机IP或主机名字,用src、dst来设定这是目的地址或源地址。
这个选项能过滤主机IP和名字
ether [src|dst] host <ehost>
尖括号里的是一个网络地址,用src、dst来设定这是目的地址或源地址。
gateway host <host>
<host> 是一个网关,抓取流过 <host> 的数据包,但这些数据包的目的地址和源地址都不是 <host>。
[src|dst] net <net> [{mask <mask>}|{len <len>}]
<net>表示一个网络地址,可以用 src、dst来表示这个网络是目的地址还是源地址的数据包。如果没有”src/dst”,表示全部数据包。可以选择加上子网掩码或使用无类型域间选路(CIDR)的方式。
[tcp|udp] [src|dst] port <port>
[tcp|udp]是选择抓取的协议类型,<port>指定端口。需要注意的是,[tcp|udp]必需在[src|dst]之前。
less|greater <length>
抓取碎片数据包或指定长度的数据包。less 与 greater 分别对应小包与大包。
ip|ether proto <protocol>
在数据链路层上,在指定的IP地址或网络地址(ip|ether)上抓取指定协议<protocol>的数据包。
ether|ip broadcast|multicast
在指定的网络地址或IP地址上抓取广播包或组播包。
- 显示
一、IP过滤:包括来源IP或者目标IP等于某个IP
比如:ip.src addr==192.168.0.208 or ip.src addr eq 192.168.0.208 显示来源IP
ip.dst addr==192.168.0.208 or ip.dst addr eq 192.168.0.208 显示目标IP
二、端口过滤:
比如:tcp.port eq 80 // 不管端口是来源的还是目标的都显示
tcp.port == 80
tcp.port eq 2722
tcp.port eq 80 or udp.port eq 80
tcp.dstport == 80 // 只显tcp协议的目标端口80
tcp.srcport == 80 // 只显tcp协议的来源端口80
过滤端口范围
tcp.port >= 1 and tcp.port <= 80
三、协议过滤:tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
ssl
等等
排除ssl包,如!ssl 或者 not ssl
四、包长度过滤:
比如:
udp.length == 26 这个长度是指udp本身固定长度8加上udp下面那块数据包之和
tcp.len >= 7 指的是ip数据包(tcp下面那块数据),不包括tcp本身
ip.len == 94 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后
frame.len == 119 整个数据包长度,从eth开始到最后
五、http模式过滤:
例子:
http.request.method == "GET"
http.request.method == "POST"
http.request.uri == "/img/logo-edu.gif"
http contains "GET"
http contains "HTTP/1."
// GET包
http.request.method == "GET" && http contains "Host: "
http.request.method == "GET" && http contains "User-Agent: "
// POST包
http.request.method == "POST" && http contains "Host: "
http.request.method == "POST" && http contains "User-Agent: "
// 响应包
http contains "HTTP/1.1 200 OK" && http contains "Content-Type: "
http contains "HTTP/1.0 200 OK" && http contains "Content-Type: "
一定包含如下
Content-Type:
六、连接符 and / or
七、表达式:!(arp.src==192.168.1.1) and !(arp.dst.proto_ipv4==192.168.1.243)
wireshark匹配规则很强大。
还有一个规则应用是关于数据包内容的字节匹配的。
例如:
//匹配TCP的payload(TCP的实际数据内容),前6个字节为 E3 11 00 00 00 48 (电驴协议)
//20是TCP头部的长度,21-~为TCP的有效数据
TCP[20:6] == E3:11:00:00:00:56 and TCP[29] == 54
还可以matches匹配一些正则表达式
//匹配UDP的payload(UDP的实际数据内容),匹配 第1和第2字节分别是0xF1、0x0; 第4和第5字节分别为0x00、0x00 (电驴协议)
//8是UDP的头部长度,8-~为UDP包的有效数据
UDP[8:2] == F1:0D and UDP[10:2] ==00:00