伯克利包过滤器(BPF)
什么是BPF?
BPF,即伯克利包过滤器 Berkeley Packet Filter,诞生于1992年,其作用是提供一种过滤包的方法来避免在内核空间复制无用的数据到用户空间。由于其简化的语言以及存在于内核中的即时编译器(JIT),使BPF成为一个性能卓越的包过滤工具。
BPF语法
- BPF过滤规则由一个或多个原语(原子式)组成。原语通常由一个标识(id,名称或数字)和标识前面的一个或多个限定词组成。
- BPF过滤规则有三种类型的限定词,分别为type、dir和 proto。
type限定词
- type限定词用于说明标识的类型,即名字的类型或数字的类型,主要有host、net和port三种类型。
- 例如:host foo,net 128.3,port 20
- 注:如果不指定类型修饰字,就使用默认的host
dir限定词
- dir限定词用于说明相对于标识的传输方向,即数据是传入还是传出标识。
- 有src,dst,src or dst和 src and dst
- 例如:src host192.168.0.1,dst net128.3,src or dst port ftp-data
- 注:如果不指定方向限定词,就使用默认的 src or dst。对于点到点类型的链路协议,用 inbound和 outbound