nullnetfilter 模块中的数据处理**专业化、规范化、
化、电子化netfilter 模块中的数据处理
编制人:王万顺
版本:v1.0
有计划、有总结、有
、有审核;null**专业化、规范化、标准化、电子化课程定位和目标本
主要是对 Netfilter模块中数据处理的代码
,使大家能够对内核netfilter有更深入的认识,理解表(NAT,FILTER,MANGLE),HOOK挂载点在linux内核网络子系统的具体实现。null**专业化、规范化、标准化、电子化2 1 表目录 HOOK3阅读代码4 结束filter表www.kernelchina.orgfilter表NF_IP_PRE_ROUTINGNF_IP_LOCAL_INNF_IP_LOCAL_OUTNF_IP_FORWARDNF_IP_POST_ROUTINGROUTEROUTE链路层传输层网络层nat表www.kernelchina.orgnat表NF_IP_PRE_ROUTINGNF_IP_LOCAL_INNF_IP_LOCAL_OUTNF_IP_FORWARDNF_IP_POST_ROUTINGROUTEROUTE链路层传输层网络层mangle表www.kernelchina.orgmangle表NF_IP_PRE_ROUTINGNF_IP_LOCAL_INNF_IP_LOCAL_OUTNF_IP_FORWARDNF_IP_POST_ROUTINGROUTEROUTE链路层传输层网络层增加一个tablewww.kernelchina.org增加一个table在内核中增加一个表,注意表所监听的检查点
这个表可以使用哪些match和target,这个表的用途是什么null**专业化、规范化、标准化、电子化2 1 表目录 HOOK3阅读代码4 结束检查点 www.kernelchina.orgnf_hooks[NPROTO][NF_MAX_HOOKS] NPROTO = 32,支持
族的数量
NF_MAX_HOOKS = 8,支持检查点的数量
检查点上的nf_hook_ops结构,按priority的值,从小到大排列nf_hook_ops检查点 检查点上的数据结构www.kernelchina.orgstruct nf_hook_ops
{
struct list_head list;
nf_hookfn *hook;
int pf;
int hooknum;
int priority;
};unsigned int nf_hookfn(unsigned int hooknum,struct sk_buff **skb,const struct net_device *in,const struct net_device *out, int (*okfn)(struct sk_buff *)); list:链表结构;hook:检查点上调用的函数;pf:协议族;hooknum:检查点的编号;priority:此结构的优先级
nf_register_hook:注册nf_hook_ops结构
nf_unregister_hook:卸载nf_hoop_ops结构检查点上的数据结构检查点的定义www.kernelchina.org#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \
(list_empty(&nf_hooks[(pf)][(hook)])\
? (okfn)(skb)\
: nf_hook_slow((pf), (hook), (skb), (indev), (outdev), (okfn))) NF_HOOK:定义检查点
(okfn)(skb):如果检查点上没有钩子函数,直接调用这个函数;如果有钩子函数,则先遍历检查点上的钩子函数,并根据钩子函数的返回值来确定下一步的动作;如果钩子函数完全遍历,同样需要调用这个函数
nf_hook_slow:遍历检查点上的nf_hook_ops结构,并调用nf_hookfn检查点的定义检查点的调用流程www.kernelchina.orgNF_DROP: 禁止包通过
NF_ACCEPT: 允许包通过
NF_STOLEN: 包被本机缓存
NF_QUEUE: 把包发送到用户空间
NF_REPEAT: 重复上一次遍历过程NF_HOOKnf_hook_slownf_hookfn(okfn)返回值检查点的调用流程检查点在PF_INET中的位置www.kernelchina.org检查点在PF_INET中的位置NF_IP_PRE_ROUTINGNF_IP_LOCAL_INNF_IP_LOCAL_OUTNF_IP_FORWARDNF_IP_POST_ROUTINGROUTEROUTE链路层传输层网络层NF_IP_PRE_ROUTINGwww.kernelchina.orgNF_IP_PRE_ROUTINGNF_IP_LOCAL_INwww.kernelchina.orgNF_IP_LOCAL_INNF_IP_FORWARDwww.kernelchina.orgNF_IP_FORWARDNF_IP_LOCAL_OUTwww.kernelchina.orgNF_IP_LOCAL_OUTNF_IP_POST_ROUTINGwww.kernelchina.orgNF_IP_POST_ROUTINGhook的顺序(优先级)www.kernelchina.orghook的顺序(优先级)NF_IP_POST_ROUTINGNF_IP_PRE_ROUTINGNF_IP_FORWARDNF_IP_LOCAL_OUTconntrack[-200]nat[dnat][-100]mangle[-150]conntrack[max]nat[snat][100]mangle[-150]NF_IP_LOCAL_INfilter[0]conntrack[max-1]mangle[-150]mangle[-150]filter[0]filter[0]nat[dnat][-100]mangle[-150]conntrack[-200]nat[100]null**专业化、规范化、标准化、电子化2 1 表目录 HOOK3阅读代码4 结束null**专业化、规范化、标准化、电子化2 1 表目录 HOOK3阅读代码4 结束null**专业化、规范化、标准化、电子化腾达与你共同发展