一、什么是BPF?
请看下面tcpdump的语句:
tcpdump -i ens192 port 80
说明一下:这条语句是对通过ens192网卡的数据过滤出访问端口80的数据包,其中port 80 就是BPF,不仅是tcpdump用到了BPF,WireShark也同样使用了BPF进行数据包过滤。
那么什么是BPF呢?BPF全程是Berkeley Packet Filter的首字母缩写,诞生于1992年,其作用是提供一种包过滤的方法来避免在内核空间复制无用的数据到用户空间。
二、BPF语法
BPF过滤规则包含三种类型的限定词,分别是:proto(协议)、dir(传输方向)、type(类型),由这些限定词组成的命令称之为原语。
① proto
proto用于过滤指定的协议,可以使用的协议包括:ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc,mopdl,tcp 和 udp。
例如:tcp port 80 ,表示过滤tcp协议且端口号为80的数据
② dir
dir用于说明相对于标识的传输方法,也就是数据是输入还是输出。有src、dst、src or dst以及src and dst。
例如:src port 80,表示过滤源端口为80的数据。dst port 80,表示过滤目的端口为80的数据。
③ type
type用于说明标识的类型,主要有host、port以及net三种。
例如 host 192.168.2.2 表示过滤IP为192.168.2.2的数据。
三、符合过滤规则
复杂的过滤器表达式可以通过and(&&),or(||)和 not(!)连接原语来组建。
例如:
src port 80 and dst port 443 , 表示过滤源端口为80且目的端口为443的数据。
打赏