为什么 netfilter 中的这个钩子无法获取 tcp 数据包中的有效负载内容?

为什么 netfilter 中的这个钩子无法获取 tcp 数据包中的有效负载内容?

为什么 netfilter 中的这个钩子无法获取 tcp 数据包中的有效负载内容?

unsigned int hook_func(void *priv, struct sk_buff *skb, const struct nf_hook_state *state)
    //这个函数是钩子函数.
    //抓到包时会执行该函数.
    //sk_buff是抓到的数据包.
    //接受了3个参数,只有中间那个用到了.
{
    struct iphdr*p=ip_hdr(skb);
    if(p->protocol==6)
    {
        printk(KERN_INFO"TCP packet!");
        printk(KERN_INFO"---len=%d",skb->len);

        struct tcphdr*t=(struct tcphdr*)skb_transport_header(skb);
        u16 srcport=ntohs(t->source),dstport=ntohs(t->dest);
        printk(KERN_INFO"---srcport=%hu,dstport=%hu",srcport,dstport);

        unsigned char *data_point=(char*)t+t->doff*4;
        if(srcport==12345||dstport==12345)
            for(int i=0;i<10;i++)
                printk(KERN_INFO"%u %u %u %u",data_point[i*4],data_point[i*4+1],data_point[i*4+2],data_point[i*4+3]);
    }
    return NF_ACCEPT;  // accept the packet
                       //这里,钩子函数判定,接受该包.
}

我希望这个钩子函数可以读取tcp内容,但它只显示0。

[ 3752.004248] TCP packet!
[ 3752.004254] ---len=58
[ 3752.004257] ---srcport=12345,dstport=35620
[ 3752.004259] 0 0 0 0
[ 3752.004262] 0 0 0 0
[ 3752.004264] 0 0 0 0
[ 3752.004266] 0 0 0 0
[ 3752.004268] 0 0 0 0

问题出在哪里?我非常痛苦地寻找答案,谢谢你的帮助

相关内容