BPF

伯克利包過濾器 （ Berkeley Packet Filter ， 縮寫 BPF ） ， 是類Unix系統上數據鏈路層的一種原始接口 ， 提供原始鏈路層封包的收發 。 除此之外 ， 如果網卡驅動支持混雜模式 ， 那麼它可以讓網卡處於此種模式 ， 這樣可以收到網絡上的所有包 ， 不管他們的目的地是不是所在主機 。 另外 ， BPF支持過濾數據包 — — 用戶態的進程可以提供一個過濾程序來聲明它想收到哪些數據包 。 通過這種過濾可以避免從操作系統內核向用戶態複製其他對用戶態程序無用的數據包 ， 從而極大地提高性能 。 BPF有時也只表示過濾機制 ， 而不是整個接口 。 一些系統 ， 比如Linux和Tru64 Unix ， 提供了數據鏈路層的原始接口 ， 而不是BPF的接口 ， 但使用了BPF的過濾機制 。 BSD 內核實現例程如 bpf_mtap 和 bpf_tap ， 以BPF_MTAP 和 BPF_TAP 等宏定義的形式進行包裹由網卡驅動 ( 以及僞驅動pseudo - drivers ) 向BPF機制發送進出的封包 。