Linux中netfilter模块编程实践

 上篇我们看了netfilter的实现机制,这篇来实现下netfilter模块实操一把。

为了注册一个钩子,需要填充nf_hook_ops结构体,包括优先级,钩子地点和钩子函数。然后调用nf_register_hook()函数。

1.   数据结构

 

 

struct nf_hook_ops {

        /* User fills in from here down. */

        nf_hookfn               *hook;

        struct net_device       *dev;

        void                    *priv;                   

        u_int8_t                pf;

        unsigned int            hooknum;

        /* Hooks are ordered in ascending priority. */

        int                     priority;                

};

定义在include/linux/netfilter.h

 

2.   模块代码一丢弃所有UDP输入包

本DEMO实现将所有输入的UDP包丢弃。钩子函数为hook_func,通过ip头的协议来指定,协议17就是表示此包是UDP包,如果将17改成1就会丢弃icmp包了。

.hooknum = 1表示是入口点过滤 NF_IP_LOCAL_IN ,如果改成3就是NF_IP_LOCAL_OUT了,这个定在内核文件include/uapi/linux/netfilter_ipv4.h,如下:

/* IP Hooks */           

/* After promisc drops, checksum checks. */

#define NF_IP_PRE_ROUTING       0

/* If the packet is destined for this box. */

#define NF_IP_LOCAL_IN          1

/* If the packet is destined for another interface. */

#define NF_IP_FORWARD           2

/* Packets coming from a local process. */

#define NF_IP_LOCAL_OUT         3

/* Packets about to hit the wire. */

#define NF_IP_POST_ROUTING      4

#define NF_IP_NUMHOOKS          5

编写源码netmod.c如下:

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/netfilter_ipv4.h>

#include <linux/skbuff.h>

#include <linux/udp.h>

#include <linux/ip.h>

原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值