在网络中,我们通常不需要捕获所有的数据包,我们经常只需要捕获到我们想要的数据包就可以了,如:我们只需要捕获tcp包或者arp包等。
当我们只需要捕获tcp包时,在选择网络连接(网卡)之后,先不要选择start,而是选择option,然后再弹出窗口中的capture filter栏中输入tcp即可,这样我们wireshark就只会捕获tcp类型的数据包了。
你也可以使用wireshark内置的过滤规则来限制捕获数据包,只需要点击capture filter,然后再弹出的窗口中,选择相应的规则即可。我们也可以自己创建新的规则到内置规则中,这样下次我们还需要进行类似的操作时就不用再手动书写规则,而直接可以在内置规则中选择即可。
选择或书写好规则后,只需要单击start按钮即可对相应的数据包进行捕获。
捕获过滤规则采用BPF语法,所以要灵活使用过滤器,则掌握BPF语法是关键。使用BPF语法创建的过滤器被称为表达式,并且每个表达式包含一个或多个原语,每个原语包含一个或多个限定词,然后后面再跟着一个ID名字或者数字,如:dst host 192.168.1.1 && tcp port 80。
这个例子的意思是捕获发往目标主机ip地址为192.168.1.1的80端口的tcp流量数据包。
dst、host、tcp和port是限定词,192.168.1.1和80是ID,&&是操作符,&&之前部分是为一个原语,即:dst host 192.168.1.1,&&之后部分为另一个原语,即:tcp port 80。
限定词包括:
限定词 | 说明 | 例子 |
Type | 指出名字或数字所代表的意义 | host、net、port |
Dir | 指明传输方向是前往还是来自名字或数字 | src、dst |
Proto | 限定所要匹配的协议 | ether、ip、tcp、udp、http、ftp、icmp等 |
我们还可以对协议域进行捕获过滤,如表达式icmp[0]==8 || icmp[0]==0表示我们只捕获echo请求(类型8)和echo回复(类型0)的icmp数据包。
常用捕获过滤器:
过滤器 | 说明 |
tcp[13]&32==32 | 设置了 URG 位的 TCP 数据包 |
tcp[13]&16==16 | 设置了 ACK 位的 TCP 数据包 |
tcp[13]&8==8 | 设置了 PSH 位的 TCP 数据包 |
tcp[13]&4==4 | 设置了 RST 位的 TCP 数据包 |
tcp[13]&2==2 | 设置了 SYN 位的 TCP 数据包 |
tcp[13]&1==1 | 设置了 FIN 位的 TCP 数据包 |
tcp[13]==18 | TCP SYN-ACK 数据包 |
ether host 00:00:00:00:00:00(MAC地址) | 流入或流出该 MAC 地址的流量 |
!ether host 00:00:00:00:00:00(MAC地址) | 不流入或流出该 MAC 地址的流量 |
broadcast | 仅广播流量 |
icmp | ICMP 流量 |
tcmp[0:2]==0x0301 | ICMP 目标不可达、主机不可达 |
ip | 仅 IPv4 流量 |
ip6 | 仅 IPv6 流量 |
udp | 仅 UDP 流量 |
转载于:https://blog.51cto.com/whitecat/1356877