_conntrack_info ctinfo;
struct nf_conn_counter *acct;
struct nf_info *info;
unsigned char *cn = NULL;
ct = nf_ct_get(skb, &ctinfo);
if (!ct || ct == &nf_conntrack_untracked)
return NF_ACCEPT;
acct = nf_conn_acct_find(ct);
if (acct) {
info = (struct nf_info *)acct;
info->info = (unsigned char*) kzalloc(32, GFP_ATOMIC);
if (!info->info) {
return NF_ACCEPT;
}
// 测试将1234567890作为字符串设置到conntrack
memcpy(info->info, "1234567890", min(32, strlen("1234567890")));
}
}
return NF_ACCEPT;
}
static struct nf_hook_ops ipv4_conn_info __read_mostly = {
.hook = ipv4_conntrack_info,
.owner = THIS_MODULE,
.pf = NFPROTO_IPV4,
.hooknum = NF_INET_LOCAL_OUT,
.priority = NF_IP_PRI_CONNTRACK + 1,
};
static int __init test_info_init(void)
{
int err;
err = nf_register_hook(&ipv4_conn_info);
if (err) {
return err;
}
return err;
}
static void __exit test_info_exit(void)
{
nf_unregister_hook(&ipv4_conn_info);
}
module_init(test_info_init);
module_exit(test_info_exit);