7

ここからのコードスニペット:

void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
    ....
    /* retireve the position of the ip header */
    ih = (ip_header *) (pkt_data +
        14); //length of ethernet header
    ....

しかし、この画像は必ずしも14であるとは言いません:

代替テキスト
(出典: lewis at www.dcs.gla.ac.uk )

どうすれば適切に行うことができますか?

4

4 に答える 4

7

802.3 では、送信元アドレスと宛先アドレスの両方が 48 ビットの MAC アドレスです。6+6+2=14

于 2010-05-09T07:34:56.960 に答える
5

はい、エンド ステーションのシナリオでは、ほとんどの場合 14 です。802.1Q フレームを使用している場合を除き、さらに 4 バイト遅れます。802.1Q は、主に VLAN タギングとルーター/ルーター通信の QoS に使用されます。

プリアンブルと開始フレーム デリミタは、主に低レベル ファームウェアでフレームをキャプチャするために使用されます。私たち (アプリケーション) がイーサネット フレームにアクセスできるようになるまでには、通常、プリアンブルも開始フレーム デリミタもありません。

私が思い出す限り、MAC アドレスの 2 バイト長はイーサネット I の一部であり、実際には受け入れられませんでした。そして、6 バイトのアドレスを持つイーサネット II/802.3 は、私たちが現在使用している実際の一般的なイーサネットです。

また、パディングは 0 ~ 46 であることに注意してください。ここで 46 は、衝突検出 (CD) の目的でイーサネット フレームの最小 64 バイトの制約に由来します。46(パッド) + 14(dmac、smac、タイプ) + 4(CRC) = 64 バイト

于 2012-10-07T07:03:50.227 に答える
1

イーサネット ヘッダーは固定幅ですが、vlan/qos 用の 802.1q などの拡張プロトコルが一般的であり、L2 ヘッダーを効果的に拡張します。

于 2010-05-09T21:34:48.683 に答える
0

ウィキペディアにはフレームの良い写真があります

ウィキ

IPv4 / v6 はレイヤー 3 プロトコルです。

于 2010-05-09T21:09:09.593 に答える