linux hook 任意内核函数,【求助】Kernel 4.8下编译编写的Netfilter Hook函数失败
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("CG");
MODULE_DESCRIPTION("FW based on Netfilter Frame");
MODULE_VERSION("1.0");
#define printk_ip(info, be32_addr)\
printk("%s %d.%d.%d.%d\n",info,\
((unsigned char *)&(be32_addr))[0],\
((unsigned char *)&(be32_addr))[1],\
((unsigned char *)&(be32_addr))[2],\
((unsigned char *)&(be32_addr))[3])
int filter_ip(__be32 addr)
{
unsigned char net_num = ((unsigned char *)&addr)[0];
unsigned char host_num = ((unsigned char *)&addr)[3];
if (net_num == 10 || host_num == 1 || host_num == 2)
return 1;
return 0;
}
int filter_src_dst_ip(__be32 s_addr, __be32 d_addr)
{
int i = filter_ip(s_addr) && filter_ip(d_addr);
return i;
}
/* NF_INET_LOCAL_IN Hook func.*/
unsigned int local_in_hook(unsigned int hooknum, struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
{
struct iphdr *ip_header;
ip_header = ip_hdr(skb);
if(filter_src_dst_ip(ip_header->saddr, ip_header->daddr))
{
printk("Local_in_hook()=============================\n");
printk_ip("Src IP:", ip_header->saddr);
printk_ip("Dst IP:", ip_header->daddr);
}
return NF_ACCEPT;
}
/*We need this to register our hook func.*/
struct nf_hook_ops local_in_ops =
{
.hook= local_in_hook,//Hook func.
.pf= PF_INET,//Protocal type -> IPV4
.hooknum= NF_INET_LOCAL_IN, //Hook Point
.priority= NF_IP_PRI_FIRST
};
/* NF_INET_LOCAL_OUT Hook func.*/
unsigned int local_out_hook(unsigned int hooknum, struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
{
struct iphdr *ip_header;
ip_header = ip_hdr(skb);
if (filter_src_dst_ip(ip_header->saddr, ip_header->daddr))
{
printk("Local_out_hook()===========================\n");
printk_ip("Src IP:", ip_header->saddr);
printk_ip("Dst IP:", ip_header->daddr);
}
return NF_ACCEPT;
}
/*Enum of LOCAL_OUT Hook func*/
struct nf_hook_ops local_out_ops =
{
.hook= local_out_hook,
.pf= PF_INET,//Protocal type -> IPV4
.hooknum= NF_INET_LOCAL_OUT,//Hook Point
.priority= NF_IP_PRI_FIRST
};
/*Register hook func.*/
static int hook_init(void)
{
printk("Hook_init()===================================\n");
nf_register_hook(&local_in_ops);
nf_register_hook(&local_out_ops);
return 0;
}
/*Unregister hook func.*/
static void hook_exit(void)
{
printk("Hook_exit()===================================\n");
nf_unregister_hook(&local_in_ops);
nf_unregister_hook(&local_out_ops);
}
module_init(hook_init);
module_exit(hook_exit);
linux hook 任意内核函数,【求助】Kernel 4.8下编译编写的Netfilter Hook函数失败相关推荐
- linux hook 任意内核函数,linux内核中的hook函数详解
在编写linux内核中的网络模块时,用到了钩子函数也就是hook函数.现在来看看linux是如何实现hook函数的. 先介绍一个结构体: struct nf_hook_ops,这个结构体是实现钩子函数 ...
- python使用第三方函数库_Python(七)python下的内部函数库和第三方函数库
返回脚本百事通 在dateutil中,吸引我的东西有2个,1个是parser,1个是rrule. 其中parser是根据字符串解析成datetime,而rrule是则是根据定义的规则来生成dateti ...
- netfilter hook函数
HOOK函数注册 image.png 上图是netfilter中注册的部分hook函数.这些hook函数是通过 nf_register_hook注册到二维数组nf_hooks中的. enum nf_i ...
- python函数定义和其四种参数_python入门第九课:函数的定义及多种参数传递方式...
本教程使用的课本是<Python编程:从入门到实践>,作者:[美] Eric Matthes 本节介绍Python中的函数,函数是可以反复使用的一段代码,有了函数能大大简化编程工作量,还能 ...
- linux 负数_linux内核提权系列教程(2):任意地址读写到提权的4种方法
一.漏洞代码分析 代码见arbitrary.h. 1.功能函数介绍 功能 输入结构名 输入结构 功能 ARBITRARY_RW_INIT init_args size 初始化全局对象,存于g_mem_ ...
- linux应用调用内核函数,Hooking linux内核函数(一):寻找完美解决方案
前言 我们最近参与了一个Linux系统安全相关项目,需要hooking几个重要的Linux内核函数调用,例如打开文件和启动进程,并利用它来启用系统活动监控并抢先阻止可疑进程. 最后,我们发明了一种有效 ...
- Linux驱动:内核的中断机制之二--request_threaded_irq函数使用
内核开始支持中断线程(threaded interrupt handler),使用接口request_threaded_irq:原来的request_irq也继续支持.使用时可根据实际情况选择合适的接 ...
- linux内核网络协议栈--kernel bridge转发逻辑(十一)
1. netdev_rx_handler_register 在分析之前首先要介绍一个重要函数:netdev_rx_handler_register,这个函数是2.6内核所没有的. netdev_rx_ ...
- linux内核多大 4.17.8,Linux Kernel 4.17结束支持,请升级到Linux 4.18内核
Linux Kernel 4.17最后一个更新是Linux Kernel 4.17.19内核,该系列内核版本将结束支持,它不会再得到新的更新,请用户把Linux内核升级到4.18版本,这样能避免安全漏 ...
最新文章
- 变态跳台阶,很难很难,终于想出来了,附推导过程,为自己鼓掌
- 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
- 移动设计需避免四种常见的用户体验失败
- linux主从库配置文件,linux 数据库主从同步配置
- 步骤2 - websocket服务器转发请求给orchestra
- 勒索病毒攻击应急防范
- MST(最小生成树)的构造
- 求最大公约数问题(信息学奥赛一本通-T1207)
- Vue为何采用异步渲染
- centos6.5 mysql主从_centos 6.5设置mysql主从同步过程记录
- 一款很好看的个人主页源码
- MDT批量部署服务搭建
- linux可视化打开root,Linux非root用户登录情况下可视化编辑root权限文本
- 同一台电脑安装两个版本的jdk和jre
- Vulnhub-Pwned
- altium Designer使用方法大总结
- 安装SQL server2017提示无法打开注册表项:“Software\Microsoft\MicrosoftsQL Server\140\Bootstrap“,注册表可能已损环。
- 电脑端Ins图片保存
- 考研计算机学硕370分,考研370分是什么水平??
- Windows 8.1 更新错误 0x80073712 解决办法
热门文章
- jQuery技术内幕:深入解析jQuery架构设计与实现原理1
- 【数据结构笔记03】算法实例:最大子列和
- C#笔记17 DataTime类型、断言、internal关键字、GUID、Excel操作、正则表达式、访问剪贴板、设计模式、版本控制
- python缩放图片,复制即用
- 用GVIM/VIM写Verilog——VIM配置分享
- 关于网站注册账号时提示Server 对象 错误 'ASP 0177 : 800401f3'
- 【前端 · 面试 】HTTP 总结(十一)—— HTTPS 概述
- C++ 优先级队列(priority_queue)
- 反转 鼠标_灵动轻巧也有好体验,电竞鼠标不能仅看“块头”
- ms sql server 多条件模糊查找