|
为什么使用 tcp_hdr(skb) 返回的tcphdr结构总是和真实的位置相差20个字节?
使用这一句可以获取正确的tcp头结构
iph = ip_hdr(sb);
tcph = (struct tcphdr *)(sbk->data + iph->ilh * 4); // 数据首部 + ip头
如果用这一句, 返回的是和上面那个方法相差(少)20字节的
tcph = tcp_hdr(sbk);
那意味着这个tcph是指向ip数据部分了?
为什么会这样呢
如果这样,取得的数据是正常的
tcph = tcp_hdr(sbk) + 1;
看内核源码的时候,
ip_hdr是 return (struct iphdr *) (skb->head + skb->network_header);
tcp_hdr是return (struct tcphdr *)(skb->head + skb->transport_header);
tcp_hdr不是直接用的?
请指教。 |
|