程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 內核模塊加載-netfilter鉤子攔截數據包獲取數據包源MAC地址

內核模塊加載-netfilter鉤子攔截數據包獲取數據包源MAC地址

編輯:編程綜合問答
netfilter鉤子攔截數據包獲取數據包源MAC地址

本人大學生,最近在研究arp防火牆,想實現主機攔截從本機出去發送的所有數據包,獲取其源mac地址,以防止主機欺騙.在網上大量調研後采用了netfilter鉤子來實現截獲數據包,但是在加載內核模塊時出現了問題.因為之前沒有接觸過網絡和內核,只能在幾天的時間裡自學了一下.所以問題比較多.現在貼出我的程序和makefile文件請大神幫忙解答!!小弟感謝不盡,這次開發對我真的很重要哈,但畢竟本人能力有限,先謝謝大家了!

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

//static char *in_dev="eth0";
//MOUDLE_PARM(in_dev,"s");
static struct nf_hook_ops nfho;
//module_init(pack_init);

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 *nskb;//mac地址通過網上給的方法無法獲取,所以直接執行DROP
// struct ethhdr *eth;

// nskb=*skb;
// eth=(struct ethhdr*)(nskb->mac.raw);
// printk("src mac:");
// printk("%02x",eth_hdr->h_source);
// printk("\n");

// switch(mac)
// {
// case 111111111111 :
return NF_DROP;
// default:
// return NF_DROP;
// }
}

int init_hook(void)
{
nfho.hook=hook_func;
nfho.hooknum=NF_INET_POST_ROUTING;
nfho.pf=PF_INET;
nfho.priority=NF_IP_PRI_FIRST;
nf_register_hook(&nfho);
return 0;
}
void cleanup_module()
{
nf_unregister_hook(&nfho);
}

makefile:
obj-m :=hook.o

KERNELDIR :=/lib/modules/uname -r/build

PWD :=$(shell pwd)
default:

make -C ${KERNELDIR} M=${PWD} modules

clean:

rm -f .o *.ko *.mod.c *.mod.o modules. Module.*

現在有三個問題:
1、模塊加載成功後沒有實現DROP的效果,主機還是可以上網。
2、模塊無法卸載。執行一次rmmod顯示殺死成功,但是還是可以grep到。
3、網上的方法已經無法實現獲取數據包源mac地址,因為後來內核中取消了ethhdr結構體。求解決辦法。

最佳回答:


參考

http://blog.chinaunix.net/uid-23390992-id-3030079.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved