NF_HOOK

2024-04-30 14:18
文章标签 hook nf

本文主要是介绍NF_HOOK,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

……
我们暂且忽略用于调试作用的语句,把 #else中NF_HOOK的定义提取出来:
#define NF_HOOK(pf, hook, skb, indev, outdev, okfn)                               \
({int __ret;                                                                       \
if (list_empty(&nf_hooks[pf][hook]) ||                                               \
    (__ret=nf_hook_slow(pf, hook, &(skb), indev, outdev, okfn, INT_MIN)) == 1) \
        __ret = (okfn)(skb);                                                       \
__ret;})

首先来看这个宏里边的二维数组nf_hooks[pf][hook] ,其中pf对应协议簇,hook对应了某个hook点,比如ipv4 协议簇(PF_INET)下有一个钩子NF_IP_PRE_ROUTING(路由查找之前),那么这个Hook点对应的这个二维数组中的元素就是nf_hooks[PF_INET][ NF_IP_PRE_ROUTING]。
nf_hooks数组是一个struct nf_hooks_ops 结构,这个结构有一个hook成员,指向这个hook点的hook函数。另一方面,同一个hook点,可能同时注册了多个hook,所以,结构struct nf_hooks_ops 中有一个list成员,用来维护一个hook点的链表。该结构定义如下:

struct nf_hook_ops
{
        struct list_head list;                        //链表成员

        /* User fills in from here down. */
        nf_hookfn *hook;                        //链子函数指针

这篇关于NF_HOOK的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949094

相关文章

【hdu】Just a Hook(线段树区间修改)

线段树模板题,练的是懒惰标记。 懒惰标记,就是更新一段区间的时候,如果小区间被包含在了所需要更新的区间里面,那么直接对代表这个区间的数组元素赋值,之后做一个标记(表示这个区间的子区间都需要更新)但是不继续递归(这样可以节省很多的时候)。 116571152014-09-15 14:17:26Accepted1698796MS2380K1750 BG++KinderRiven #

Netfilter学习之NAT类型动态配置(八)nf_nat_proto_common.c代码解析

nf_nat_proto_common.c实现了对称型的端口改变,在此我决定对其代码进行分析,以便实现对对称型NAT的随意改动。    具体代码如下: #include <linux/types.h>#include <linux/random.h>#include <linux/netfilter.h>#include <linux/export.h>#include <net/n

react、vue 提供的 hook 函数对比

文章目录 useMemo vs computeduseEffect vs watch useMemo vs computed React 的useMemo 和 Vue3 的computed 分别用于优化性能和避免不必要的计算的两个概念。它们的目标相似,但实现方式和使用场景有所不同。它们都用于优化那些依赖于其他状态或属性,并且计算成本较高的表达式。以下是它们的主要区别: Rea

企业微信hook协议接口,聚合群聊客户管理工具开发

服务提供了丰富的API和SDK,可以在企微的功能之上进行应用开发和功能扩展 自建应用可以调用企微hook或协议提供的接口来实现数据交互,可以直接调用hook或协议接口提供的功能来进行消息的发送与接收、用户管理、应用管理等操作,通过接口可以实现自动回复、定时发送消息等功能,可以用来获取用户信息、添加或删除用户,发送文本消息、图片、文件、语音、视频等多种类型的消息,可以监听特定类型的消息,支持朋友圈

Android Hook ActivityThread mH 消息

背景: 今天面试被问到如何监听ActivityThread mH 类的消息,当时的想法是,mH 其实就是Handler, Android 没有提供获取到mH 的方法,就算我可以拿到mH 的 Looper, 最多也就可以在Looper 里面设置一个private Printer mLogging; ,当打印的时候就可以知道当前在分发mH 类的任何消息。 但是对方说,不希望在这里拦截,有没有其他方

linux内核hook技术之函数地址替换

前言     函数地址替换是一种更为简单、常见的hook方式,比如对security_ops、sys_call_table等结构中的函数进行替换,来完成自己的安全权限控制。     其中security_ops是LSM框架中所使用的,sys_call_table是系统调用表结构。当然了,这些结构目前在内核中都已经是只读数据结构了,如果想直接进行函数替换的话,首先就是考虑解决关闭写保护的问题。在

linux内核hook技术之跳转指令偏移值

前言     在另一篇博文中提到了指令覆盖和指令注入的hook方式,使用覆盖和注入方式完成内核函数hook,需要有很多的注意事项,而且容易被检测工具检测。这篇博文则聊一下如何通过替换跳转指令偏移值来完成内核函数的hook,这种hook技术也可以称为inline hook。     事先做个准备工作,手头正好有centos 6系列操作系统,还有一个热腾腾刚出锅的vmlinux。通过 gdb  v

linux内核hook技术之指令覆盖与注入

前言     说到hook,传统意义上,大家都会觉得跟注入和劫持挂钩。在linux内核中,也可以通过指令覆盖和注入的方式进行hook,来完成自己的业务逻辑,实现自己的功能需求。     一部分人喜欢称这种hook技术为inline hook。 如何hook     具体hook细节在以下编写的驱动例子程序中给出了,例子中标注了详细的注释,大家可对照着代码查看。     例子程序在cent

Android利用ptrace实现Hook API

以下内容选自《深入解析Android5.0系统》,京东,当当,亚马逊上有售。 Hook API的技术由来已久,在操作系统未能提供所需功能的情况下,利用HookAPI的手段来实现某种必需的功能也算是一种不得已的办法。 笔者了解Hook API技术最早是在十几年前,当时是在Windows平台下开发电子词典的光标取词功能。这项功能就是利用HookAPI的技术把系统的字符串输出函数替换成了电子词典中

Native开发与逆向第六篇 -字符串加密与hook

开发demo 写一个简单的字符串加密处理,将字符串字符转成ASCII十六进制值 std::string StrToHex(std::string str){unsigned char c;char buf[3];std::string result = "";std::stringstream ss;ss << str;while (ss.read((char *)(&c), sizeof(c