BPF(BSD Packet Filter)简介

BPF(BSD Packet Filter)是一种抓取并过滤网络数据包(capture and filter packet)的内核结构(kernel architecture)。BPF包含2个重要的组成部分:网络分流器(network tap)和包过滤器(packet filter)。网络分流器负责从网络驱动拷贝数据包,而包过滤器则过滤掉不符合条件的数据包,只把符合需求的数据包上报给应用程序。下图摘自UNP

BPF

当数据包到达网卡时,正常情况下,数据链路层的驱动程序会把包转给协议栈。但当有BPF监听网卡时,驱动程序会首先把包发给BPFBPF会把包发给不同程序的包过滤器,再由过滤器决定哪些包并且包里的哪些内容应该保存下来。对于符合条件的数据包,BPF会把数据拷贝到和包过滤器对应的缓存(buffer)。然后驱动程序继续执行。

在用tcpdump命令过滤数据包时:

tcpdump -p -ni eth0 -d "ip and udp"

实际就用到了BPF

发表评论

电子邮件地址不会被公开。 必填项已用*标注