【发布时间】:2019-05-10 13:58:59
【问题描述】:
我知道我可以像这样获取 TCP 数据包数据的指针:
char *data = (char *)tcphdr + 4 * tcph->doff;
但是一旦数据被分割,我就无法以这种方式获得完整的数据。那么如何获取下一段的下一个sk_buff呢?
我的简单代码:
#include ...
static struct nf_hook_ops nfho;
unsigned int hook_funcion(void *priv, struct sk_buff *skb, const struct
nf_hook_state *state)
{
// check if it is TCP packet
char *data = (char *)tcphdr + 4 * tcph->doff;
// do something here
return NF_ACCEPT;
}
static int __init hook_init(void)
{
int ret;
nfho.hook = hook_funcion;
nfho.pf = NFPROTO_IPV4;
nfho.hooknum = NF_INET_POST_ROUTING;
nfho.priority = NF_IP_PRI_LAST;
ret = nf_register_hook(&nfho);
printk("xmurp-test start\n");
printk("nf_register_hook returnd %d\n", ret);
return 0;
}
static void __exit hook_exit(void)
{
nf_unregister_hook(&nfho);
printk("xmurp-test stop\n");
}
module_init(hook_init);
module_exit(hook_exit);
【问题讨论】:
-
对于那些在 nf_register_hook 部分出现编译错误的人,我尝试了 nf_register_net_hook(&init_net,&rk_pre_routing);参考:unix.stackexchange.com/questions/413797/… 而且,这(对我而言;在我的情况下)它也可以与 SE url 中提到的 nf_unregister 一起使用。如果我在某些方面错了,请纠正我,谢谢! //愿望
标签: c tcp linux-kernel network-programming