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



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

我什至使用了尾巴 - sizeof(my_data); 然后我也没有得到想要的O/P。

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

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 指定器(十六进制数字)需要数字相加,而不是指针,这就是为什么您不应该忘记放置一个小 (*)

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

最新更新