2012-04-27 12 views
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を得ていない。私が理解したよう

+0

これを行うには、[print_hex_dump_bytes](http://lxr.linux.no/linux+v3.3.3/lib/hexdump.c#L242)を使用してください。 –

答えて

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 specificator(16進数)を使用すると、小さな1(*)を置くことを忘れてはならない理由だと、数値agrumentではなく、ポインタをrequers

-1

私はカーネルハッカー午前ませんが、見てskbuff.hヘッダファイルには、sock_buff->dataまたはsock_buff->tailのいずれかがヘッダの後のデータを指しているように見えます。その場合、printk(KERN_INFO"user data :: %s",sock_buff->data);がそのトリックを行うかもしれません。

関連する問題