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)中找到,從而將新的鏈接與以前的連接聯繫起來。

相關文章
相關標籤/搜索