为什么 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
问题出在哪里?我非常痛苦地寻找答案,谢谢你的帮助