我有一个linux内核模块需要处理通过netfilter hook接收的数据作为套接字缓冲区。
这就是我在回调中所做的,
unsigned char *eth = skb_mac_header(skb);
int len = skb->len + 14; //Assuming eth is 14 bytes. Neglecting VLAN case.
for (int j=0; j < len; j++)
{
printk("%X ", eth[j]);
}
收到数据包后,我得到正确的长度。但是,某些UDP流量的数据包内容只有正确的48个字节(初始),其余字节不是我的接口所接收的。用户空间应用程序正在接收在接口上接收的正确数据包内容。
任何人都可以帮助解释我做错了什么。将非常感谢帮助。谢谢。
答案 0 :(得分:0)
skb_mac_header(skb)为您提供指向mac标头的指针。它的有效长度是skb-&gt; mac_len。
如果您需要转储用户数据(有效负载),您可以将每个字符从skb-&gt;数据打印到skb-&gt;尾部。以下链接显示了skb数据布局:http://vger.kernel.org/~davem/skb_data.html。