免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3760 | 回复: 2
打印 上一主题 下一主题

netfilter中hook返回值NF_REPEAT和NF_STOLEN [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-12 15:33 |只看该作者 |倒序浏览
初次接触netfilter源码, 对这两个返回值的理解不大明白.故向各位大虾请教.\r\n\r\n1. NF_REPEAT:\r\nnetfilter.c中\r\nstatic unsigned int nf_iterate(struct list_head *head,\r\n                               struct sk_buff **skb,\r\n                               int hook,\r\n                               const struct net_device *indev,\r\n                               const struct net_device *outdev,\r\n                               struct list_head **i,\r\n                               int (*okfn)(struct sk_buff *))\r\n{\r\n        for (*i = (*i)->next; *i != head; *i = (*i)->next) {\r\n                struct nf_hook_ops *elem = (struct nf_hook_ops *)*i;\r\n                switch (elem->hook(hook, skb, indev, outdev, okfn)) {\r\n                case NF_QUEUE:\r\n                        return NF_QUEUE;\r\n\r\n                case NF_STOLEN:\r\n                        return NF_STOLEN;          \r\n\r\n                case NF_DROP:\r\n                        return NF_DROP;\r\n\r\n                case NF_REPEAT:\r\n                        *i = (*i)->prev;\r\n                        break;\r\n\r\n#ifdef CONFIG_NETFILTER_DEBUG\r\n                case NF_ACCEPT:\r\n                        break;\r\n\r\n                default:\r\n                        NFDEBUG(\"Evil return from %p(%u).\\n\", \r\n                                elem->hook, hook);\r\n#endif\r\n                }\r\n        }\r\n        return NF_ACCEPT;\r\n}\r\n\r\n问题1:当前结点的hook如果返回NF_REPEAT,则回到上一个结点继续处理,而如果上一个结点的返回值是一个非法值,则不会break,又回到返回NF_REPEAT的结点,死循环?\r\n问题2:体现在用户空间(iptables)中, NF_REPEAT会由哪个target触发?或者由什么条件触发hook返回该值? \r\n\r\n2.NF_STOLEN:\r\n在网上搜索时,看到某些解释是: NF_STOLEN 忘掉该数据包   NF_DROP 丢弃该数据包\r\n在内核源码中grep它的使用时, 类似以下代码\r\nif (ret != NF_DROP && ret != NF_STOLEN\r\n            && ((*pskb)->nh.iph->saddr != saddr\r\n                || (*pskb)->nh.iph->daddr != daddr))\r\n                return ip_route_me_harder(pskb) == 0 ? ret : NF_DROP;\r\n\r\n我并未看出NF_STOLEN和NF_DROP有何不同, 都是不对数据包进行处理,那么\r\n问题1. 在内核空间中NF_STOLEN和NF_DROP有何区别?\r\n问题2. 在用户空间, NF_STOLEN会由什么条件触发HOOK返回该值?

论坛徽章:
0
2 [报告]
发表于 2008-06-13 11:13 |只看该作者
发错地方了, 应该发到程序开发区的内核源码区中. 但是移动不了.

论坛徽章:
0
3 [报告]
发表于 2008-06-14 18:06 |只看该作者
NF_DROP是丢弃该数据包,不在向上层传递
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP