文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>利用netfilter的hook来实现数据包的过滤

利用netfilter的hook来实现数据包的过滤

时间:2007-03-07  来源:leigaiting

利用netfilter的hook来实现数据包的过滤

#define __KERNEL__
#define MODULE

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/ip.h>                  /* For IP header */
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>

/* 用于注册我们的函数的数据结构 */
static struct nf_hook_ops nfho;

/* 我们要丢弃的数据包来自的地址,网络字节序 */
static unsigned char *drop_ip = "\x7f\x00\x00\x01";

/* 注册的hook函数的实现 */
unsigned int hook_func(unsigned int hooknum,
                       struct sk_buff **skb,
                       const struct net_device *in,
                       const struct net_device *out,
                       int (*okfn)(struct sk_buff *))
{
    struct sk_buff *sb = *skb;
   
    // 译注:作者提供的代码中比较地址是否相同的方法是错误的,见注释掉的部分
    if (sb->nh.iph->saddr == *(unsigned int *)drop_ip) {
    // if (sb->nh.iph->saddr == drop_ip) {
        printk("Dropped packet from... %d.%d.%d.%d\n",
      *drop_ip, *(drop_ip + 1),
  *(drop_ip + 2), *(drop_ip + 3));
        return NF_DROP;
    } else {
        return NF_ACCEPT;
    }
}

/* 初始化程序 */
int init_module()
{
    /* 填充我们的hook数据结构 */
    nfho.hook       = hook_func;         /* 处理函数 */
    nfho.hooknum  = NF_IP_PRE_ROUTING; /* 使用IPv4的第一个hook */
    nfho.pf       = PF_INET;
    nfho.priority = NF_IP_PRI_FIRST;   /* 让我们的函数首先执行 */

    nf_register_hook(&nfho);

    return 0;
}

/* 清除程序 */
void cleanup_module()
{
    nf_unregister_hook(&nfho);
}
Makefile for Fedoral Core4 ####---Makefile----#####
test = net_hook
obj-m := $(test).o
KERNELDIR=/lib/modules/`uname -r`/build
PWD=`pwd`
default :
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
install :
        insmod $(test).ko
uninstall :
        rmmod $(test).ko

clean :
        rm -rf *.o *.mod.c *.ko
Makefile for 2.4.20-8
########---Makefile-----############
CC=cc
TARGET=net_hook
CFLAG := -Wall  -DLINUX
$(TARGET).o:$(TARGET).c /usr/include/linux/version.h
        $(CC) $(CFLAG) -c   $(TARGET).c -I /usr/src/linux-2.4.20-8/include
install:
        insmod $(TARGET).o
clean:
        rm -f *.o
相关阅读 更多 +
排行榜 更多 +
掌上长乐

掌上长乐

浏览阅读 下载
顺路顺风车

顺路顺风车

交通出行 下载
拼图呀切图

拼图呀切图

图像拍照 下载