首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于Netfilter NF_HOOK宏的outdev参数bug

1.首先指出,NF_HOOK系列宏的outdev参数的传递方式(直接传递一个net_device结构体指针)是不正确的 正确的方式要么是不传递,要么是传递指针的地址,即地址的地址。...2.接下来指出,仅仅传递一个地址为何不对 因为在该HOOK点可能存在多个HOOK函数,每一个函数都有可能改变skb的路由,即调用reroute,比如NAT,比如IP Mark等,这样后续的HOOK函数看到的依然是旧的...因为OUTPUT处在路由之后,如果其中的mangle表改变了skb的mark,那么会reroute,不幸的是,reroute并无法改变OUTPUT点上NF_HOOK的outdev参数值!...4.怎么修正 办法很多,依次介绍: a.使用setsockopt打mark而不是iptables打mark,绕开OUTPUT和路由的暧昧关系; b.修改NF_HOOK的dev参数为struct net_device...**类型,然后在reroute中重路由成功后执行*out = (struct dst_entry*)skb_dst(skb)->dev;从而改变NF_HOOK中的outdev的值; c.去掉NF_HOOK

39910
您找到你想要的搜索结果了吗?
是的
没有找到

Linux Hook技术实践

LInux Hook技术实践 什么是hook 简单的说就是别人本来是执行libA.so里面的函数的,结果现在被偷偷换成了执行你的libB.so里面的代码,是一种替换。...为什么hook 恶意代码注入 调用常用库函数时打log 改变常用库函数的行为,个性化 怎么hook 这个东西在win里面有现成的api,但是在linux里面却要主动修改ELF文件,或者修改动态库链接路径...所以这里提供一种简单的方法来hook 下面直接demo吧 /*myselect.c*/ #define _GNU_SOURCE #include #include <stdio.h...举个例子: 某些系统上select的实现可能与众不同,在没有fd就绪时,并不阻塞,而是忙等,这时便可以通过hook技术,在select中插入usleep,达到释放cpu的作用。

1.2K10

数据库的范式(1NF、2NF、3NF、BNCF)

BNCF范式:在第三范式的基础上,消除主属性之间的部分函数依赖 第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系。...例:如职工号,姓名,电话号码组成一个表(一个人可能有多个电话号码) 规范成为1NF有三种方法:   一是重复存储职工号和姓名。这样,关键字只能是电话号码。   ...第二范式(2NF):如果关系模式R(U,F)中的所有非主属性都完全依赖于任意候选关键字,则称关系R 是属于第二范式的。...它对任何一个候选关键字都是完全函数依赖的,并且是直接依赖,所以该关系模式是3NF。   分析一下主属性。...1NF直到BCNF的四种范式之间有如下关系: BCNF包含了3NF包含2NF包含1NF 小结:   目的:规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新   原则:

97920

软考高级架构师:数据库的范式 1NF 、2NF 、3NF 和 BCNF

主要的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和巴斯-科德范式(BCNF)。每个高级范式都建立在前一个范式的基础上。...确保表中的每个列的值都与主键直接相关 第二范式(2NF)是基于哪个范式之上的? A. 1NF B. 3NF C....外键约束 如果一个关系模式R满足BCNF,则一定满足: A. 1NF但不一定 满足2NF B. 2NF但不一定满足3NF C. 3NF和2NF D. 1NF, 2NF和3NF 在数据库设计中,范式的提升通常意味着什么...A. 1NF B. 2NF C. 3NF D. BCNF (2)答案和解析 C....D. 1NF, 2NF和3NF 解析:如果一个关系模式满足BCNF,那么它一定也满足1NF、2NF和3NF,因为BCNF是在这些范式的基础上进一步加强约束的范式。 C.

12600

Netfileter & iptables 实现(一)— Netfilter实现

前面我们介绍过,Netfilter 通过链表来存储钩子函数,而钩子函数是通过结构 nf_hook_ops 来描述的,其定义如下: // 文件:include/linux/netfilter.h struct...其中 hook 字段的类型为 nf_hookfn,nf_hookfn 类型的定义如下: // 文件:include/linux/netfilter.h typedef unsigned int nf_hookfn...要触发调用某个挂载点上(链)的所有钩子函数,需要使用 NF_HOOK 宏来实现,其定义如下: // 文件:include/linux/netfilter.h #define NF_HOOK(pf, hook...我们来看看 nf_hook_slow 函数的实现: // 文件:net/core/netfilter.c int nf_hook_slow(int pf, unsigned int hook, struct...六、总结 本文主要介绍了 Netfilter 的实现,因为 Netfilter 是 Linux 网络数据包过滤的框架,而 iptables 就是建立在 Netfilter 之上的。

1.4K20

深入理解 netfilter 和 iptables!

Netfilter 的设计与实现 netfilter 的定义是一个工作在 Linux 内核的网络数据包处理框架,为了彻底理解 netfilter 的工作方式,我们首先需要对数据包在 Linux 内核中的处理路径建立基本认识...hook 触发点 对于不同的协议(IPv4、IPv6 或 ARP 等),Linux 内核网络栈会在该协议栈数据包处理路径上的预设位置触发对应的 hook。...所有接收数据包到达的第一个 hook 触发点(实际上新版本 Linux 增加了 INGRESS hook 作为最早触发点),在进行路由判断之前执行。...NF_HOOK 宏和 netfilter 向量 所有的触发点位置统一调用 NF_HOOK 这个宏来触发 hook: static inline int NF_HOOK(uint8_t pf, unsigned...在执行 NF-HOOK 宏触发指定的 hook 时,将调用 nf_iterate 函数迭代这个 hook 对应的 nf_hook_ops 链表,并依次调用每一个 nf_hook_ops 的注册函数成员

98821

(一)洞悉linux下的Netfilter&iptables:什么是Netfilter?

Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能...Netfilter使用NF_HOOK(include/linux/netfilter.h)宏在协议栈内部切入到Netfilter框架中。...在include/linux/socket.h中IP协议AF_INET(PF_INET)的序号为2,因此我们就可以得到TCP/IP协议族的钩子函数挂载点为: PRE_ROUTING: nf_hooks...其核心就是nf_hook_slow()函数。...小节:整个Linux内核中Netfilter框架的HOOK机制可以概括如下: 在数据包流经内核协议栈的整个过程中,在一些已预定义的关键点上PRE_ROUTING、LOCAL_IN、FORWARD、LOCAL_OUT

1.9K21

深入理解 netfilter 和 iptables

Netfilter 的设计与实现 netfilter 的定义是一个工作在 Linux 内核的网络数据包处理框架,为了彻底理解 netfilter 的工作方式,我们首先需要对数据包在 Linux 内核中的处理路径建立基本认识...hook 触发点 对于不同的协议(IPv4、IPv6 或 ARP 等),Linux 内核网络栈会在该协议栈数据包处理路径上的预设位置触发对应的 hook。...所有接收数据包到达的第一个 hook 触发点(实际上新版本 Linux 增加了 INGRESS hook 作为最早触发点),在进行路由判断之前执行。...NF_HOOK 宏和 netfilter 向量 所有的触发点位置统一调用 NF_HOOK 这个宏来触发 hook: static inline int NF_HOOK(uint8_t pf, unsigned...在执行 NF-HOOK 宏触发指定的 hook 时,将调用 nf_iterate 函数迭代这个 hook 对应的 nf_hook_ops 链表,并依次调用每一个 nf_hook_ops 的注册函数成员

58420
领券