struct nf_conn *ct = NULL;
enum ip_conntrack_info ctinfo;
ct = nf_ct_get(skb,&ctinfo);获得连接状态.
但ct返回去的结果为空,这怎么回事,只能查找内核看看啥原因,
这个首先要看看ct这个东西是什么时候创建的了,经过看内核,发现这个结构体是在ipv4_conntrack_in和ipv4_conntrack_local时候产生的,那么这两个是干什么的呢,跟踪后发现这两个是netfilter的两个钩子ipv4_conntrack_ops[] 这个数组中进行了初始化,
在继续往上跟,ipv4_conntrack_ops这个数组是在nf_conntrack_l3proto_ipv4_init中通过nf_register_hooks进行了注册,那么nf_conntrack_l3proto_ipv4_init这个是什么东东,继续发现,他是个模块的初始化函数(module_init(nf_conntrack_l3proto_ipv4_init)),到这明白,原来nf_ct_get若能正常返回,需要依赖一个模块,而此模块为nf_conntrack_ipv4,通过用modprobe nf_conntrack_ipv4加载模块后,在调用nf_ct_get就能正常获得连接状态