講解netfilter連接跟蹤主要數(shù)據(jù)結(jié)構(gòu)
linux協(xié)議棧中netfiler框架對(duì)數(shù)據(jù)包做過(guò)濾處理基本上都是基于連接跟蹤來(lái)做的,比如snat、dnat等,連接跟蹤就是記錄數(shù)據(jù)流在協(xié)議棧中的兩個(gè)方向,不同的協(xié)議有不同的特征,tcp/udp就是五元組(源ip、目的Ip、源端口、目的端口、協(xié)議號(hào)),icmp協(xié)議就是ip、id、type、code。
1、struct nf_conn
struct nf_conn結(jié)構(gòu)體是連接跟蹤的抽象結(jié)構(gòu),其中最重要的元素是struct nf_conntrack_tuple_hash tuplehash[IP_CT_DIR_MAX]記錄了條連接的特征信息,根據(jù)這個(gè)結(jié)構(gòu)中的信息可以確定唯一的一條連接,還有是連接的狀態(tài)unsigned long status,各元素的詳解如下。
【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)? ?


數(shù)據(jù)包的連接狀態(tài)定義在枚舉變量ip_conntrack_info中
3、連接跟蹤狀態(tài)
4、struct nf_conntrack_tuple_hash
hnnode是一個(gè)鏈表,主要是struct nf_conntrack_tuple
struct nf_conntrack_tuple這個(gè)結(jié)構(gòu)保存了連接不同協(xié)議的特征信息,u是一個(gè)聯(lián)合體,不同協(xié)議有不同特征,tcp/udp協(xié)議的五元組,icmp協(xié)議的type、code、id
struct nf_conntrack_man主要保存三層ip和四層端口
5、 struct nf_conntrack_l3proto
struct nf_conntrack_l2proto主要定義了一些三層Ip協(xié)議的操作函數(shù),獲取tuple結(jié)構(gòu)三層協(xié)議相關(guān)的特征(源ip、目的ip),nfnetlink格式和tuple格式的源ip、目的ip轉(zhuǎn)換。
struct nf_conntrack_l3proto結(jié)構(gòu)實(shí)例如下
6、struct nf_conntrack_l4proto
struct nf_conntrack_l4proto結(jié)構(gòu)主要是四層協(xié)議和tuple相關(guān)的操作函數(shù),獲取tuple結(jié)構(gòu)四層協(xié)議相關(guān)的特征,tcp/udp協(xié)議就是源端口、目的端口,icmp協(xié)議是id、type、code,nfnetlink格式和tuple格式四層特性元素轉(zhuǎn)換。
6.1 、nf_conntrack_l4proto_tcp4
tcp協(xié)議struct nf_conntrack_l4proto實(shí)例化是nf_conntrack_l4_proto_tcp4
6.2 、nf_conntrack_l4proto_udp4
udp協(xié)議struct nf_conntrack_l4proto實(shí)例如下
6.3、nf_conntrack_l4proto_icmp
imcp協(xié)議的struct nf_conntrack_l4proto的實(shí)例如下
原文作者:TCH_ world
