Linux Kernel Netfilter Helper 分析

linux netfilter 与helper相关的hook:linux

点击(此处)折叠或打开函数

{orm

.hook = ipv4_conntrack_in,ip

.owner = THIS_MODULE,get

.pf = PF_INET,it

.hooknum = NF_IP_PRE_ROUTING,io

.priority = NF_IP_PRI_CONNTRACK,ftp

}数据

{filter

.hook = ipv4_conntrack_help,

.owner = THIS_MODULE,

.pf = PF_INET,

.hooknum = NF_IP_POST_ROUTING|NF_IP_LOCAL_IN,

.priority = NF_IP_PRI_CONNTRACK_HELPER,

}

第一个数据包到来的流程:

ipv4_conntrack_in --> nf_conntrack_in --> resolve_normal_ct --> nf_ct_get_tuple --> nf_conntrack_find_tuple(1) --> init_conntrack --> nf_ct_find_expection(2) --> nf_ct_helper_find(3) --> nf_ct_helper_ext_add(4)


(1) 查找tuple五元组,由于是第一个链接,全部查找不到

(2) 查找期待链接,由于没有添加过时待链接,全部也查找不到

(3) 查找注册的helper,这里以tftp为例,找到了tftp注册的helper

(4) 将找到的helper添加到ct结果体中


在以后的ipv4_conntrack_help的hook函数中,会执行ct->helper->help函数,这个help函数tftp_help会添加一个exp到全局期待链接表中


当期待的连接的第一个数据包到达的时候,会在(2)中找到,从而将新的链接与以前的连接联系起来。

相关文章
相关标签/搜索