Linux 2.6.31 用のイーサネット パケットを受信するカーネル モジュールを作成しています。によって登録されたの関数にstruct sk_buff
渡される へのポインタから、イーサネット パケットの内容を抽出したいと考えています。構造体のどのメンバーを参照すればよいですか? 本体が 46 バイトのイーサネット パケットを送信したとき、は 48 で、は 46 でした。ここでは へのポインタです。func
struct packet_type
dev_add_pack
skb->data - skb->head
skb->len
skb
struct sk_buff
質問する
1899 次
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 に答える