0

Linux 2.6.31 用のイーサネット パケットを受信するカーネル モジュールを作成しています。によって登録されたの関数にstruct sk_buff渡される へのポインタから、イーサネット パケットの内容を抽出したいと考えています。構造体のどのメンバーを参照すればよいですか? 本体が 46 バイトのイーサネット パケットを送信したとき、は 48 で、は 46 でした。ここでは へのポインタです。funcstruct packet_typedev_add_packskb->data - skb->headskb->lenskbstruct sk_buff

4

2 に答える 2

-1

sk_buff 構造からデータを次のように抽出できます...

char buff[1024];    
int i=0;
//printk("******start of the data*******\n");
while(i<((skb->tail)-(skb->data)))
buff[i]=(char *)((skb->data)[i]);

バッファのサイズは異なる場合があります。または、必要に応じて定義できます。

&このバッファでは、実際には、ヘッダー付きまたはヘッダーと実際のパケットペイロードなしでデータをコピーしました。それは、sk_buff をどこでキャプチャしているかによって異なります (どのレイヤーを意味するか)。パケットがソケットから NIC に、または NIC からソケットに移動すると、sk_buff の関連フィールドが更新されるためです。

于 2012-11-06T10:09:37.480 に答える