该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#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函数失败相关推荐

  1. linux hook 任意内核函数,linux内核中的hook函数详解

    在编写linux内核中的网络模块时,用到了钩子函数也就是hook函数.现在来看看linux是如何实现hook函数的. 先介绍一个结构体: struct nf_hook_ops,这个结构体是实现钩子函数 ...

  2. python使用第三方函数库_Python(七)python下的内部函数库和第三方函数库

    返回脚本百事通 在dateutil中,吸引我的东西有2个,1个是parser,1个是rrule. 其中parser是根据字符串解析成datetime,而rrule是则是根据定义的规则来生成dateti ...

  3. netfilter hook函数

    HOOK函数注册 image.png 上图是netfilter中注册的部分hook函数.这些hook函数是通过 nf_register_hook注册到二维数组nf_hooks中的. enum nf_i ...

  4. python函数定义和其四种参数_python入门第九课:函数的定义及多种参数传递方式...

    本教程使用的课本是<Python编程:从入门到实践>,作者:[美] Eric Matthes 本节介绍Python中的函数,函数是可以反复使用的一段代码,有了函数能大大简化编程工作量,还能 ...

  5. linux 负数_linux内核提权系列教程(2):任意地址读写到提权的4种方法

    一.漏洞代码分析 代码见arbitrary.h. 1.功能函数介绍 功能 输入结构名 输入结构 功能 ARBITRARY_RW_INIT init_args size 初始化全局对象,存于g_mem_ ...

  6. linux应用调用内核函数,Hooking linux内核函数(一):寻找完美解决方案

    前言 我们最近参与了一个Linux系统安全相关项目,需要hooking几个重要的Linux内核函数调用,例如打开文件和启动进程,并利用它来启用系统活动监控并抢先阻止可疑进程. 最后,我们发明了一种有效 ...

  7. Linux驱动:内核的中断机制之二--request_threaded_irq函数使用

    内核开始支持中断线程(threaded interrupt handler),使用接口request_threaded_irq:原来的request_irq也继续支持.使用时可根据实际情况选择合适的接 ...

  8. linux内核网络协议栈--kernel bridge转发逻辑(十一)

    1. netdev_rx_handler_register 在分析之前首先要介绍一个重要函数:netdev_rx_handler_register,这个函数是2.6内核所没有的. netdev_rx_ ...

  9. linux内核多大 4.17.8,Linux Kernel 4.17结束支持,请升级到Linux 4.18内核

    Linux Kernel 4.17最后一个更新是Linux Kernel 4.17.19内核,该系列内核版本将结束支持,它不会再得到新的更新,请用户把Linux内核升级到4.18版本,这样能避免安全漏 ...

最新文章

  1. 变态跳台阶,很难很难,终于想出来了,附推导过程,为自己鼓掌
  2. 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
  3. 移动设计需避免四种常见的用户体验失败
  4. linux主从库配置文件,linux 数据库主从同步配置
  5. 步骤2 - websocket服务器转发请求给orchestra
  6. 勒索病毒攻击应急防范
  7. MST(最小生成树)的构造
  8. 求最大公约数问题(信息学奥赛一本通-T1207)
  9. Vue为何采用异步渲染
  10. centos6.5 mysql主从_centos 6.5设置mysql主从同步过程记录
  11. 一款很好看的个人主页源码
  12. MDT批量部署服务搭建
  13. linux可视化打开root,Linux非root用户登录情况下可视化编辑root权限文本
  14. 同一台电脑安装两个版本的jdk和jre
  15. Vulnhub-Pwned
  16. altium Designer使用方法大总结
  17. 安装SQL server2017提示无法打开注册表项:“Software\Microsoft\MicrosoftsQL Server\140\Bootstrap“,注册表可能已损环。
  18. 电脑端Ins图片保存
  19. 考研计算机学硕370分,考研370分是什么水平??
  20. Windows 8.1 更新错误 0x80073712 解决办法

热门文章

  1. jQuery技术内幕:深入解析jQuery架构设计与实现原理1
  2. 【数据结构笔记03】算法实例:最大子列和
  3. C#笔记17 DataTime类型、断言、internal关键字、GUID、Excel操作、正则表达式、访问剪贴板、设计模式、版本控制
  4. python缩放图片,复制即用
  5. 用GVIM/VIM写Verilog——VIM配置分享
  6. 关于网站注册账号时提示Server 对象 错误 'ASP 0177 : 800401f3'
  7. 【前端 · 面试 】HTTP 总结(十一)—— HTTPS 概述
  8. C++ 优先级队列(priority_queue)
  9. 反转 鼠标_灵动轻巧也有好体验,电竞鼠标不能仅看“块头”
  10. ms sql server 多条件模糊查找