在网络数据包中打印用户数据

时间:2012-04-27 07:44:34

标签: c linux-kernel kernel-module

我制作了一个模块,我通过网络过滤器接收所有传入的数据包。我想在/ var / log / messages中打印数据(无标题)。我尝试了以下printk行,但没有打印出合适的消息。

 struct sk_buff *sock_buff; 
 printk(KERN_INFO"user data :: %x",(sock_buff->data+sizeof(*sock_buff->network_header)+sizeof(*sock_buff->mac_header))  //though i want in character but i cant understand whats it printing not matching the hex of my data
  printk(KERN_INFO"user data :: %s",(sock_buff->data+sizeof(*sock_buff->network_header)+sizeof(*sock_buff->mac_header))

我甚至使用过tail-sizeof(my_data);然后我也没有得到o / p。

2 个答案:

答案 0 :(得分:2)

也许你忘了用指针(*)取值,试试这个

printk(KERN_INFO"user data :: %x",*(sock_buff->data+sizeof(*sock_buff->network_header) +sizeof(*sock_buff->mac_header));  

据我所知,在你的结构数据字段中有一个指针类型。

typedef struct{
  ...
  unsigned char* data;
  ...
} sk_buff;

同样%x特定者(十六进制数)需要数字agrument,而不是指针,这就是为什么你不应该忘记放一个小(*)

答案 1 :(得分:-1)

我不是内核黑客,但是查看skbuff.h头文件,它看起来sock_buff->datasock_buff->tail中的一个指向标题后的数据。在这种情况下,printk(KERN_INFO"user data :: %s",sock_buff->data);可能会成功。