2

我制作了一个模块,在其中我通过网络过滤器接收所有传入的数据包。我想在 /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。

4

2 回答 2

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 说明符(十六进制数字)需要数字参数,而不是指针,这就是为什么你不应该忘记放一个小的 (*)

于 2012-04-27T08:00:49.257 回答
-1

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

于 2012-04-27T08:38:02.907 回答