1 int nf_register_net_hooks(struct net *net, const struct nf_hook_ops *reg, 2 unsigned int n) 3 { 4 unsigned int i; 5 int err = 0; 6 7 /* 循环注册钩子函数 */ 8 for (i = 0; i < n; i++) { 9 err = nf_register_net_hook(net, ®[i]); 10 /* 失败 */ 11 if...
将TCP传输过来的数据包打包成IP数据报,将数据打包成IP数据包之后,通过调用ip_local_out函数,在该函数内部调用了__ip_local_out,该函数返回了一个nf_hook函数,在该函数内部调用了dst_output int ip_queue_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl) { struct inet_sock *inet = inet...
1.首先指出,NF_HOOK系列宏的outdev参数的传递方式(直接传递一个net_device结构体指针)是不正确的正确的方式要么是不传递,要么是传递指针的地址,即地址的地址。...因为OUTPUT处在路由之后,如果其中的mangle表改变了skb的mark,那么会reroute,不幸的是,reroute并无法改
int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev){ return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, dev, NULL, ip_rcv_finish); } 这里NF_HOOK 是一个钩子函数,当执行完注册的钩子后就会执行到最后一个参数指向的函数 ip...
NF_ACCEPT //保留该数据包 NF_STOLEN //忘掉该数据包 NF_QUEUE //将该数据包插入到用户空间 NF_REPEAT //再次调用该hook函数 1. 2. 3. 4. 5. 如果要注册一个钩子函数,就要先申明一个nf_hook_ops 结构体,然后对其结构体里面的各个属性进行相应的赋值 ...
nf_register_hook(&nfho); return 0; } /* 清除程序 */ void cleanup_module() { nf_unregister_hook(&nfho); } 这就是全部内容,从示例代码1中,你可以看到,注销一个Netfilter hook是一件很简单事情,只需要调用nf_unregister_hook()函数,并且以你之前用于注册这个hook时用到的相同的数据结构的地址作为参...
51CTO博客已为您找到关于linux nf hook的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及linux nf hook问答内容。更多linux nf hook相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。
这里NF_HOOK是一个钩子函数,当执行完注册的钩子后就会执行到最后一个参数指向的函数ip_rcv_finish。 static int ip_rcv_finish(struct sk_buff *skb){ ... if(!skb_dst(skb)) { int err = ip_route_input_noref(skb, iph->daddr, iph->saddr, iph->tos, skb->dev); ......
首先是 在./Source/net/netfilter/core.c文件中的函数 nf_register_hook: static DEFINE_SPINLOCK(nf_hook_lock); int nf_register_hook(struct nf_hook_ops *reg) { struct list_head *i; spin_lock_bh(&nf_hook_lock); list_for_each(i, &nf_hooks[reg->pf][reg->hooknum]) { ...
这里NF_HOOK是一个钩子函数,当执行完注册的钩子后就会执行到最后一个参数指向的函数ip_rcv_finish。 static int ip_rcv_finish(struct sk_buff *skb){ ... if(!skb_dst(skb)) { int err = ip_route_input_noref(skb, iph->daddr, iph->saddr, iph->tos, skb->dev); ......