《TCP/IP详解卷2:实现》笔记--BPF:BSD 分组过滤程序

本文是《TCP/IP详解卷2:实现》中关于BPF(BSD分组过滤程序)的笔记,介绍了BPF如何作为软件设备过滤网络接口数据流,包括bpf_if和dpf_d结构,以及bpfopen、bpfioctl、bpf_setif、bpf_attachd等关键函数的使用。同时,讲解了BPF输入过程,如bpf_tap、catchpacket和bpfread函数的工作原理。
摘要由CSDN通过智能技术生成

BSD分组过滤程序(BPF)是一种软件设备,用于过滤网络接口的数据流,即给网络接口加上开关。应用进程打开/dev/bpf0、

/dev/bpf1等等后,可以读取BPF设备,每个应用进程一次只能打开一个BPF设备。

通过若干ioctl命令,可以配置BPF设备,把它与某个网络接口相关联,并安装过滤程序,从而能够选择性地接收输入的分组。

BPF设备打开后,应用进程通过读写设备来接收分组,或将分组放入网络接口队列中。

BPF设备工作的前提是网络接口必须能够支持BPF。之前提到的以太网和环回接口的驱动程序都调用了bpfattach,用于配置

读取BPF设备的接口。


1.bpf_if结构

BPF维护一个链表,包含所有支持BPF的网络接口,每个接口都有一个bpf_if结构描述,全局指针bpf_iflist指向表中的第一个
结构,下图给出了BPF接口结构。

bif_next指向链表中的下一个BPF接口结构。
bif_dlist指向另一个链表,包括所有已打开并配置过的BPF设备。
如果某个网络接口已配置了BPF设备,即被加上了开关,则bif_driverp为空。为某个网络接口配置BPF设备是时,*bif_driverp
将指向bif_if结构,从而告诉接口可以开始向BPF传递分组。
接口类型保存在bif_dlt中。下图列出了几个接口所对应的常量值。

下图给出了每个输入分组中附加的bpf_hdr结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值