Wireshark过滤规则
- 过滤MAC地址
eth.addr == 80:f6:2e:ce:3f:00 //过滤目标或源地址是80:f6:2e:ce:3f:00的数据包
eth.src == 80:f6:2e:ce:3f:00 //过滤源地址是80:f6:2e:ce:3f:00的数据包
eth.dst == 80:f6:2e:ce:3f:00 //过滤目标地址是80:f6:2e:ce:3f:00的数据包
- 过滤VLAN
vlan.id == 2594
- IP过滤
//源地址过滤
ip.src == 192.168.0.208
ip.src eq 192.168.0.208
//目标地址过滤
ip.dst == 192.168.0.208
ip.dst eq 192.168.0.208
//ip地址过滤。不论源还是目标
ip.addr == 192.168.0.208
ip.addr eq 192.168.0.208
- 端口过滤
tcp.port == 80
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
- 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: ”
- 运算符
less than:lt <
less and equal: le ≤
equal:eq =
great then:gt >
great and equal:ge ≥
not equal:ne ≠
- 过滤内容
tcp[20] 表示从20开始,取1个字符
tcp[20:]表示从20开始,取1个字符以上
tcp[20:8]表示从20开始,取8个字符
tcp[offset,n]
udp[8:3]==81:60:03 // 偏移8个bytes,再取3个数,是否与==后面的数据相等?
udp[8:1]==32 如果我猜的没有错的话,应该是udp[offset:截取个数]=nValue
eth.addr[0:3]==00:06:5B
判断upd下面那块数据包前三个是否等于0x20 0x21 0x22
我们都知道udp固定长度为8
udp[8:3]==20:21:22
判断tcp那块数据包前三个是否等于0x20 0x21 0x22
tcp一般情况下,长度为20,但也有不是20的时候
tcp[8:3]==20:21:22
matches(匹配)和contains(包含某字符串)语法
ip.src==192.168.1.107 and udp[8:5] matches "\x02\x12\x21\x00\x22"
ip.src==192.168.1.107 and udp contains 02:12:21:00:22
ip.src==192.168.1.107 and tcp contains "GET"
udp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP数据包,不一定是从第一字节匹配。
- 通过报文细节创建显示过滤规则
右键细节并使用Apply as Filter子菜单,就可以根据此细节创建过滤条件。比如使用Apply as Filter->Selected
- 以上均为Display Filter。在开始抓包前可以进行过滤:
Capture Filter (尽量避免使用抓包过滤。即便多看几个报文,也比漏看一个报文要好)
host 10.3.1.1:抓取发到/来自10.3.1.1的数据流
host 2406:da00:ff00::6b16:f02d:抓取发到/来自IPv6地址2406:da00:ff00::6b16:f02d的数据流
not host 10.3.1.1:抓取除了发到/来自10.3.1.1以外的所有数据流
src host 10.3.1.1:抓取来自10.3.1.1的数据流
dst host 10.3.1.1:抓取发到10.3.1.1的数据流
host 10.3.1.1 or 10.3.1.2:抓取发到/来自10.3.1.1,以及与之通讯的所有数据流,与10.3.1.2,以及与之通讯的所有数据流
host www.espn.com:抓取发到/来自所有解析为www.espn.com的IP地址的数据流
net 10.3.0.0/16:抓取网络10.3.0.0上发到/来自所有主机的数据流(16表示长度)
net 10.3.0.0 mask 255.255.0.0:与之前的过滤结果相同
ip6 net 2406:da00:ff00::/64:抓取网络2406:da00:ff00:0000(IPv6)上发到/来自所有主机的数据流
not dst net 10.3.0.0/16:抓取除了发到以10.3开头的IP地址以外的所有数据流
not src net 10.3.0.0/16:抓取除了来自以10.3开头的IP地址以外的所有数据流
ip proto <protocol code>:抓取ip协议字段等于<protocol code>值的报文。如TCP(code 6), UDP(code 17), ICMP(code 1)。
ip[2:2]==<number>:ip报文大小
ip[8]==<number>:TTL(Time to Live)值
ip[9]==<number>:协议值
icmp[icmptype]==<identifier>: 抓取 ICMP代码等于identifier的ICMP报文, 如icmp-echo 以及 icmp-request。
方括号中第一个数字表示从协议头开始的偏移量,第二个数字表示需要观察多少位。
ip broadcast:抓取广播报文
ip multicast:抓取多播报文
dst host ff02::1:抓取到IPv6多播地址所有主机的数据流
dst host ff02::2:抓取到IPv6多播地址所有路由器的数据流
ether host 00:08:15:00:08:15:抓取发到/来自00:08:15:00:08:15的数据流
ether src 02:0A:42:23:41:AC:抓取来自02:0A:42:23:41:AC的数据流
ether dst 02:0A:42:23:41:AC:抓取发到02:0A:42:23:41:AC的数据流
not ether host 00:08:15:00:08:15:抓取除了发到/来自00:08:15:00:08:15以外的所有数据流
ether broadcast或ether dst ff:ff:ff:ff:ff:ff:抓取广播报文
ether multicast:多播报文
抓取指定以太网类型的报文:ether proto 0800
抓取指定VLAN:vlan <vlan number>
抓取指定几个VLAN:vlan <vlan number> and vlan <vlan number>
port 53:抓取发到/来自端口53的UDP/TCP数据流(典型是DNS数据流)
not port 53:抓取除了发到/来自端口53以外的UDP/TCP数据流
port 80:抓取发到/来自端口80的UDP/TCP数据流(典型是HTTP数据流)
udp port 67:抓取发到/来自端口67的UDP数据流(典型是DHCP据流)
tcp port 21:抓取发到/来自端口21的TCP数据流(典型是FTP命令通道)
portrange 1-80:抓取发到/来自端口1-80的所有UDP/TCP数据流
tcp portrange 1-80:抓取发到/来自端口1-80的所有TCP数据流
port 20 or port 21:抓取发到/来自端口20或21的UDP/TCP数据流(典型是FTP数据和命令端口)
host 10.3.1.1 and port 80:抓取发到/来自10.3.1.1端口80的数据流
host 10.3.1.1 and not port 80:抓取发到/来自10.3.1.1除了端口80以外的数据流
udp src port 68 and udp dst port 67:抓取从端口68到端口67的所有UDP数据流(典型是从DHCP客户端到DHCP服务器)
udp src port 67 and udp dst port 68:抓取从端口67到端口68的所有UDP数据流(典型是从DHCP服务器到DHCP客户端)
抓取TCP连接的开始(SYN)和结束(FIN)报文,配置tcp[tcpflags] & (tcp-syn|tcp-fin)!=0
抓取所有RST(Reset)标志位为1的TCP报文,配置tcp[tcpflags] & (tcp-rst)!=0
less <length>:抓取小于等于某一长度的报文,等同于len <=<length>
greater <length>:抓取大于等于某一长度的报文,等同于len >=<length>
tcp[13] & 0×00 = 0: No flags set (null scan)
tcp[13] & 0×01 = 1: FIN set and ACK not set
tcp[13] & 0×03 = 3: SYN set and FIN set
tcp[13] & 0×05 = 5: RST set and FIN set
tcp[13] & 0×06 = 6: SYN set and RST set
tcp[13] & 0×08 = 8: PSH set and ACK not set
tcp[13]是从协议头开始的偏移量,0,1,3,5,6,8是标识位
TCP报文
旧版TCP Flags字段:
新版TCP Flags字段:
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有 DATA数据传输,
RST表示连接重置。
SYN与FIN是不会同时为1,
当出现FIN包或RST包时,认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,客户端与服务器建立了一个连接,
PSH为1表示的是有真正的TCP数据包内容被传递.
抓取FIN包: tcp.flags==1
抓取SYN包: tcp.flags==2
抓取RST包: tcp.flags==4
抓取PSH包: tcp.flags==8
抓取ACK包: tcp.flags==16
抓取URG包:tcp.flags==32
SYN+ACK:tcp.flags==18