利用netfilter的hook来实现数据包的过滤(For Kernel2.4)
2009-03-24 16:46
441 查看
利用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
原文地址
http://duanjigang.spaces.live.com/blog/cns!e7589305a6368d5a!122.entry
相关文章推荐
- 利用netfilter机制,实现内核防火墙把http请求和回应的数据包截获后,解释出其中的http层数据
- 利用Java Servlets 2.4实现过滤
- 利用Java Servlets 2.4实现过滤
- 利用HOOK技术实现DLL远程进程注入
- 利用CDO实现邮件阅读或发送回执功能 For .Net
- 用Java Servlets 2.4实现过滤
- 利用netfilter hook开发llinux后门rootkit程序
- 利用for循环实现的隔行变色
- 利用Hook技术实现键盘监控 --转
- 利用Linux Netfilter实现报文提取驱动
- 【Activity】多个Activity带返回值跳转_startActivityForResult_【场景】选择项利用Activity实现,不用popuwindow的情况
- 用循环单链表的方式实现对冗余数据包的过滤处理
- 利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符
- 利用System.arraycopy代替for循环实现数组复制
- 用C语言实现对冗余层发送的数据包进行过滤判断处理
- asp.net mvc 5 利用ActionFilterAttribute实现权限过滤
- NDIS中间层驱动实现截获数据包、包过滤功能
- CI中利用hook实现用户权限访问
- 利用 ApsaraDB For SQL Server各版本高效而低廉地实现关键业务需求