Chinaunix

标题: 问个netfilter写内核模块的问题,较急,大家帮下忙 [打印本页]

作者: monkeygreg    时间: 2010-04-12 20:43
标题: 问个netfilter写内核模块的问题,较急,大家帮下忙
目前想写个内核模块实现对外面过来的访问,限制部分ip浏览部分url

其实现在问题还不在于程序,而是内核模块加载问题
我现在写了个最简单的程序,只要是tcp包就丢弃,挂在local_out的点上,按理说不能上网了,但一点用没有
make成功,insmod也没问题,还缺什么步骤吗,刚接触这个不久,希望大家多帮忙

代码如下



#define __KERNEL__
#define MODULE

#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/ip.h>
#include <linux/netfilter_ipv4.h>


static unsigned int sample(unsigned int hooknum,struct sk_buff **skb,
                const struct net_device *in,
                const struct net_device *out,int (*okfn)(struct sk_buff *))
{
    struct iphdr *iph;
    struct sk_buff *sb = *skb;
    iph= ip_hdr(sb);  //2.6的内核

    printk("sample function success");         //系统日志里没打印

   if(iph->protocol==6){
           printk("TCP DROP");                      //系统日志里没打印
       return NF_DROP;   
       }
     return NF_DROP;
      
}

static struct nf_hook_ops iplimitfilter
={ {NULL,NULL} ,sample,PF_INET,NF_IP_LOCAL_OUT,NF_IP_PRI_FILTER-1}; //优先级应该没错吧

int init_module(void)
{
      printk("Load"); //系统日志里有打印
    return nf_register_hook(&iplimitfilter);

}

void cleanup_module(void)
{
      printk("Unload"); //系统日志里有打印
    nf_unregister_hook(&iplimitfilter);
}
作者: rain_fish    时间: 2010-04-12 21:57
看看这个:http://blog.chinaunix.net/u2/89664/showart.php?id=2197652
作者: monkeygreg    时间: 2010-04-13 15:29
找到原因了,应该是
={ {NULL,NULL} ,sample,THIS_MODULE,PF_INET,NF_IP_LOCAL_OUT,NF_IP_PRI_FILTER-1};
作者: 梅川内依酷    时间: 2010-04-13 16:12
你这个不会导致死机?
作者: langue    时间: 2010-04-13 16:21
写模块多麻烦,-j QUEUE
作者: monkeygreg    时间: 2010-04-13 16:48
wokao死机了,怎么回事
作者: monkeygreg    时间: 2010-04-13 17:01
回复 5# langue


    放在用户态做吗,能否指点迷津,给点资料或例子
作者: 梅川内依酷    时间: 2010-04-13 17:27
回复 6# monkeygreg


    struct sk_buff *sb ;sb=skb;
作者: langue    时间: 2010-04-13 18:34
回复 7# monkeygreg

是在用户态,最简单的是用NF_QUEUE,你搜索libnetfilter_queue
作者: doofy    时间: 2010-04-13 23:54
回复 6# monkeygreg


    难道楼主抓到arp报文了?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2