当前位置:  技术问答>linux和unix

netfilter源码中hook的返回值NF_REPEAT和NF_STOLEN.

    来源: 互联网  发布时间:2016-03-26

    本文导语:  初次接触netfilter源码, 对这两个返回值的理解不大明白.故向各位大虾请教. 1. NF_REPEAT: netfilter.c中 static unsigned int nf_iterate(struct list_head *head,        struct sk_buff **skb,        int hook,        const st...

初次接触netfilter源码, 对这两个返回值的理解不大明白.故向各位大虾请教.

1. NF_REPEAT:
netfilter.c中
static unsigned int nf_iterate(struct list_head *head,
       struct sk_buff **skb,
       int hook,
       const struct net_device *indev,
       const struct net_device *outdev,
       struct list_head **i,
       int (*okfn)(struct sk_buff *))
{
for (*i = (*i)->next; *i != head; *i = (*i)->next) {
struct nf_hook_ops *elem = (struct nf_hook_ops *)*i;
switch (elem->hook(hook, skb, indev, outdev, okfn)) {
case NF_QUEUE:
return NF_QUEUE;

case NF_STOLEN:
return NF_STOLEN;   

case NF_DROP:
return NF_DROP;

case NF_REPEAT:
*i = (*i)->prev;
break;

#ifdef CONFIG_NETFILTER_DEBUG
case NF_ACCEPT:
break;

default:
NFDEBUG("Evil return from %p(%u).n", 
elem->hook, hook);
#endif
}
}
return NF_ACCEPT;
}

问题1:当前结点的hook如果返回NF_REPEAT,则回到上一个结点继续处理,而如果上一个结点的返回值是一个非法值,则不会break,又回到返回NF_REPEAT的结点,死循环?
问题2:体现在用户空间(iptables)中, NF_REPEAT会由哪个target触发?或者由什么条件触发hook返回该值? 

2.NF_STOLEN:
在网上搜索时,看到某些解释是: NF_STOLEN 忘掉该数据包   NF_DROP 丢弃该数据包
在内核源码中grep它的使用时, 类似以下代码
if (ret != NF_DROP && ret != NF_STOLEN
    && ((*pskb)->nh.iph->saddr != saddr
|| (*pskb)->nh.iph->daddr != daddr))
return ip_route_me_harder(pskb) == 0 ? ret : NF_DROP;

我并未看出NF_STOLEN和NF_DROP有何不同, 都是不对数据包进行处理,那么
问题1. 在内核空间中NF_STOLEN和NF_DROP有何区别?
问题2. 在用户空间, NF_STOLEN会由什么条件触发HOOK返回该值?

|
问题1:当前结点的hook如果返回NF_REPEAT,则回到上一个结点继续处理,而如果上一个结点的返回值是一个非法值,则不会break,又回到返回NF_REPEAT的结点,死循环? 
//不是回到上一个节点,因为for循环要取*i = (*i)->next,所以还是当前节点,符合NF_REPEAT的语义。

问题2:体现在用户空间(iptables)中, NF_REPEAT会由哪个target触发?或者由什么条件触发hook返回该值? 
//这是hook函数自己的事。如果处理不当,总返回NF_REPEAT,就是死锁了。

问题1. 在内核空间中NF_STOLEN和NF_DROP有何区别? 
//DROP就是丢弃,释放所有相关资源,就好象没有收到这个报文。STOLEN则表示hook函数接管了这个报文的处理,netfilter(你说的内核)将放弃对这个报文的任何处理,但资源是不释放的。

问题2. 在用户空间, NF_STOLEN会由什么条件触发HOOK返回该值?
//随便:)

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在网上看了netfilter资料两天,确认一下关于netfilter程序的几个问题:
  • 请问哪里能找到netfilter的connection tracking的实现或源吗分析的相关文章。 iis7站长之家
  • 有关netfilter编译时出现的一些小错误
  • linux内核桥这一块有一个Netfilter文件夹,是做什么用的?
  • 请问哪里能找到netfilter的connection tracking的实现或源吗分析的相关文章。
  • 请教前辈们关于netfilter/iptables的问题
  • 关于netfilter开发,急
  • netfilter的怪问题
  • 关于使用netfilter,如何把数据送到用户空间?
  • netfilter中可以使用什么同步机制?
  • netfilter里如何获得TCP包的数据?
  • 关于netfilter开发的问题
  • netfilter处理的数据包是什么样的
  • 从netfilter里注册的函数获得的sk_buff的数据包如何重组?
  • 用netfilter钩子函数统计输出包的个数,出错了!
  • 请问连接镜像端口后数据包经过netfilter中hook点NF_IP_PRE_ROUTING时如何操作
  • 我要写一个用来修改packet的模块(就是iptables的插件可以向netfilter中添加一些过滤的规则),需要看那些书,请大侠们指教????
  • 在netfilter中可以用copy_to_user和copy_from_user吗
  • 在netfilter中使用NF_QUEEN把数据交由用户进程处理,碰到倒霉事,郁闷啊。。
  • 菜人netfilter问题,急急急,请高手帮忙 急急急急急急急急急急急急


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3