请参阅以下netfilter标头:http : //lxr.free-electrons.com/source/include/uapi/linux/netfilter.h我们有:
9 /* Responses from hook functions. */
10 #define NF_DROP 0
11 #define NF_ACCEPT 1
12 #define NF_STOLEN 2
13 #define NF_QUEUE 3
14 #define NF_REPEAT 4
15 #define NF_STOP 5
16 #define NF_MAX_VERDICT NF_STOP
在这里,我找到了这一段:
NF_DROP返回代码意味着应完全丢弃此数据包,并释放为其分配的所有资源。NF_ACCEPT告诉Netfilter,到目前为止,该数据包仍然可以接受,并且应该移至网络堆栈的下一个阶段。NF_STOLEN很有趣,因为它告诉Netfilter“忘记”该数据包。这告诉Netfilter,挂钩函数将从此处开始处理此数据包,而Netfilter应该丢弃对其的所有处理。但是,这并不意味着释放该分组的资源。数据包及其相应的sk_buff结构仍然有效,只是hook函数从Netfilter手中夺走了数据包的所有权。NF_REPEAT请求Netfilter再次调用hook函数。
但是我不知道discarding
和forgetting
数据包之间关于NF_DROP
和的区别是什么NF_STOLE
?
本文档全面概述了netfilter的工作原理以及原因。
我的理解是,返回NF_DROP
告诉netfilter丢弃数据包,而返回NF_STOLEN
基本上意味着您从现在起就对数据包负责:内核仍然在其内部表中包含该数据包,现在您负责告诉内核在完成对数据包的所有其他操作后将其清理干净。
对于大多数应用程序,您将需要使用NF_DROP
而不是NF_STOLEN
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句