内核数据包解析
前言
本文主要目的是从无线驱动中解析出dhcp报文,并将其滤除。
关于结构体struct sk_buf *skb
内核中sk_buff结构体在各层协议之间传输不是用拷贝sk_buff
结构体,而是通过增加协议头和移动指针来操作的。如果是从L4传输到L2,则是通过往sk_buff
结构体中增加该层协议头来操作;如果是从L4到L2,则是通过移动sk_buff
结构体中的data指针来实现,不会删除各层协议头。这样做是为了提高CPU的工作效率。
要解决的问题
路由器是我们日常生活中不可或缺的产品,然而,在有些情况下,由于路由器的覆盖范围有限,需要用到扩展器来实现无线信号的扩展,对于扩展器,一般分为有线扩展器和无线扩展器,扩展器工作在桥模式下时,会出现多DHCP的问题,这时,我们就需要对某些接口上的DHCP包做一些特殊处理,因此,我们首先需要解决的就是如何从获取的数据包中识别DHCP报文以及在何处对这些报文做出处理。故本文需要解决的问题主要有两个:
- 如何识别DHCP报文
(1)、DHCP属于应用层协议
(2)、DHCP协议采用UDP作为传输协议
(3)、主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口 在何处进行滤包
(1)、__br_deliver
(2)、__br_forward
解析DHCP报文
/* net/bridge/br_forword.c */