Chinaunix

标题: 关于linux中的netfilter机制的 [打印本页]

作者: vntbbb    时间: 2012-09-03 17:32
标题: 关于linux中的netfilter机制的
大神们,您好,我想问两个问题:
1.netfilter中使用的那五个钩子点是不是linux协议栈本身就定义好的吗?
2.netfilter是不是只是对这五个钩子点及这五个钩子点的钩子函数进行调用,注册之类的管理呢?
谢谢大家了。
作者: hk2305621    时间: 2012-09-03 19:20
对网络子系统也不是很懂, 同样求解.
作者: Godbach    时间: 2012-09-04 09:30
回复 1# vntbbb
1.netfilter中使用的那五个钩子点是不是linux协议栈本身就定义好的吗?

是的,内核代码中已经有的。当然,这些 Hook 点本身是需要 Netfilter 启用的情况下才有效。

Netfilter 是可以通过内核配置来启用或者禁用的。网络协议栈没有 Netfilter 是可以正常该工作的。

2.netfilter是不是只是对这五个钩子点及这五个钩子点的钩子函数进行调用,注册之类的管理呢?

Netfilter 好像最多支持的 hook 点是超过 5 个的。只是当前内核里面实现了这个 5 个,也基本上够用了。

作者: vntbbb    时间: 2012-09-04 10:01
回复 3# Godbach


    谢谢,太感激版主啦
作者: vntbbb    时间: 2012-09-04 10:04
回复 3# Godbach


    版主,您说的:是的,内核代码中已经有的。当然,这些 Hook 点本身是需要 Netfilter 启用的情况下才有效。

如果没有启用netfilter的情况下,能不能自己调用系统调用的方式来在这些hook点上进行钩子函数的注册呢?

作者: Godbach    时间: 2012-09-04 10:21
回复 5# vntbbb

如果没有启用netfilter的情况下,能不能自己调用系统调用的方式来在这些hook点上进行钩子函数的注册呢?

   
内核态程序是直接调用内核提供的 API 了,不是系统调用了。

如果没有启用 Netfilter 的话,我不大清楚能否注册 Hook 成功,就算注册成功,Hook 函数也是不会被调用的。这个看代码就知道了。
  1. #else /* !CONFIG_NETFILTER */
  2. #define NF_HOOK(pf, hook, skb, indev, outdev, okfn) (okfn)(skb)
复制代码
netfilter.h 中这两行代码说明了,没有配置 Netfilter,NF_HOOK 直接就是执行一下 okfn 这个函数指针,所有的 hook 函数都不会被调用了。
作者: vntbbb    时间: 2012-09-04 11:00
回复 6# Godbach


    哦,原来如此,万分感激
作者: Godbach    时间: 2012-09-04 11:56
回复 7# vntbbb
内核版有很多 Netfilter 的精华帖,你可以看看。


   
作者: vntbbb    时间: 2012-09-04 14:55
回复 8# Godbach


   嗯嗯,谢谢版主,我要努力看




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2