内核模块加载-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_devs"");
static struct nf_hook_ops nfho;
//module_init(pack_init);

unsigned int hook_func(unsigned int hooknumstruct sk_buff **skbconst struct net_device *inconst struct net_device *outint (*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

解决方案二:
参考
http://blog.csdn.net/wswifth/article/details/5115358

解决方案三:
错误信息提示定义找不到,你的代码有问题,没有包含对应的头文件等

解决方案四:
是程序的问题?还是应该连接到交换机或路由上抓包,或者是写驱动。

时间: 2024-09-10 11:02:52

内核模块加载-netfilter钩子拦截数据包获取数据包源MAC地址的相关文章

jquery easyui 的dialog怎么样在里面加载一个页面,页面的的数据从数据库返回出来

问题描述 jquery easyui 的dialog怎么样在里面加载一个页面,页面的的数据从数据库返回出来 如图 解决方案 嵌套iframe,或者用jquery加载网页到divhttp://blog.csdn.net/linlin_juejue/article/details/8211291 解决方案二: AJAX JSON返回,写一个查询的函数 解决方案三: jquery easyui dialog可以两种方式使用: 第一种: 1.定义div,使用iframe 解决方案四: dialog+da

如何解决estjs中异步数据加载失败问题(加载数据超时导致数据加载失败),或延长extjs异步数据加载时间?

问题描述 如何解决estjs中异步数据加载失败问题(加载数据超时导致数据加载失败),或延长extjs异步数据加载时间? 问题补充:lizhi92574 写道 解决方案 Ext.data.Connection.prototype.timeout='9000';设置ajax请求时间默认30秒解决方案二:对解决方案三:你加载多大的数据居然超时了?

webview加载本地的url能不能获取到cookies值呢

问题描述 webview加载本地的url能不能获取到cookies值呢 把前端的h5页面还是css.js等文件打包成zip文件,然后从服务器下载到sdcard中然后进行解压用webview加载文件的html文件,获取到cookie吗? 解决方案 获取WebView加载网页后的cookies 解决方案二: http://www.cnblogs.com/sunzn/archive/2013/04/03/2998113.html

activemq-使用消息队列的方式从一个数据平台获取数据

问题描述 使用消息队列的方式从一个数据平台获取数据 是如何保证数据的不重复?也就是说每次取数据都要按照时间字段做限制?还是说不需要关心这个,他给什么就收什么?是多线程的吗,实时保持通信?望好心人做做解答.多谢 解决方案 看什么数据来源,它本身是否支持对消息的唯一编码.如果没有唯一的编码,那么只能以时间戳来作为唯一的依据.消息队列一般都是支持多线程并发的,但是你的程序仍然需要做相应的处理. 解决方案二: 虽然你没有提供多少细节,但是一些常识性的东西可以回答你,根据著名的cap原则,在分布式系统上,

ext grid 数据加载成功,却显示不了数据

问题描述 我的grid从后台加载数据成功,却显示不了数据 !整体布局是一个viewport,左侧树形,右侧表格,当我单击树形的值时,在表格显示结果.===========================================这是grid 代码:CurrentDataGrid = function(viewer, config){ this.viewer = viewer; Ext.apply(this, config); this.store = new Ext.data.Store(

ASP.NET MVC加载用户控件后如何获取其内控件值或赋值

有网友看了这篇<ASP.NET MVC加载ASCX之后,并为之赋值>http://www.cnblogs.com/insus/p/3643254.html 之后,问及Insus.NET,不想在控件制器内进行赋值,而是想在视图中使用jQuery来获取用户控件内的控件值或是为它们赋值.那需要怎样来做呢? 下面Insus.NET花上少少时间,做个简单的例子,演示与分享实现的方法. 实现之前,先修改一下AscxUtility.cs这个类中的 public static HtmlString Rende

内核模块加载-Linux内核3.13 struct proc_dir_entry make 出错,

问题描述 Linux内核3.13 struct proc_dir_entry make 出错, 20C #include #include #include #include static struct proc_dir_entry *mod_entry;static int __init tarp_init(void){ mod_entry = create_proc_entry(MODULE_PATH 0644 NULL); mod_entry->owner = THIS_MODULE; m

winform向网页提交数据和获取数据的问题

问题描述 https://www.icloud.com/activationlock/我想向https://www.icloud.com/activationlock/提交一个序列号(C7JNM6PHG5MN),还有验证码,并且获取提交后的得到的结果.首先我想到的是利用填表单的形式,不过发现验证码图片地址找不到.后来想到用post,却不知道postdata...求大神解答,在此谢谢了! 解决方案 本帖最后由 qq470406706 于 2015-03-02 00:12:04 编辑解决方案二:图片

iOS开发中使用UIScrollView实现图片轮播和点击加载_IOS

UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 二.实现代码 storyboard中布局 代码: 复制代码 代码如下: #import "YYViewController.h" @interface YYViewController () <UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollview; /**  *  页码  */ @pro