irewallu
register_firewall的原型说明与调用方法同register_firewall。三、防火墙函数模块的设计
f1、防火墙函数模块的返回值返回值是至关重要的,内核将根据它来决定对网络数据报采取的处理策略。主要返回值及意义如下:0和1通知内核忽略该网络报。1通知内核忽略该网络报,并发送不可达到的网络控制报(ICMP报文)。2通知内核认可该网络报。2、各模块函数的入口参数参数this指向register_firewall中的fw参数结构。参数pf含义同register_firewall中的pf参数。
f参数dev
dev是指向数据结构device的指针。在Li
ux系统中,每一个网络设备都是用device数据结构来描述的。在系统引导期间,网络设备驱动程序向Li
ux登记设备信息,如设备名、设备的IO基地址、设备中断号、网卡的48位硬件地址等,device数据结构中包括这些设备信息以及设备服务函数的地址。关于device结构的详细信息可参见
etdeviceh头文件。
参数phdr
该参数指向链路层数据报报头首址。
参数arg
利用这个参数可以向内核传递信息,如重定向时的端口号。
参数pskb
此参数是指向sk_buff结构指针的指针。在Li
ux中,所有网络数据的发送和接收都用sk_buff数据结构表示。在sk_buff数据结构
f中包含有对应设备结构的device地址、传输层、网络层、链路层协议头地址等。关于sk_buff的定义可参见skbuffh头文件。
3、防火墙程序示例
下面给出一个简单防火墙程序。在这里假设读者对以太协议、IP协议、TCP协议等常用协议有一定的了解。用命令行