2016-12-15 19 views
-2

Cコードでイーサネットフレームを使って生データを構築しようとしています。 パケット(Ethernet-> IP-> UDP-> DHCPプロトコルを含む)を構築し、それをWiFiインタフェース経由で送信しました。私はそれを印刷したWireshark経由で追跡しました。 Ethernet2 - >フレームチェックシーケンス - >間違っていて、XXXであるべきです。イーサネットの生データとフレームチェックシーケンス

パケットにFCSデータを作成していないため、フィールドを空白のままにしました。 ここでは、Cで単純な関数/コードを見つけることができません。私が見つけたすべてのコードは、私に悪い結果をもたらしました。

誰かが以前に行ったことがあり、イーサネットパケットにFCSを実装する方法を共有できますか?

は事前に

+0

てください[MCVE](http://stackoverflow.com/help/mcve) –

+0

@MichaelFoukarakis:これはもっとオフトピックもあるライブラリーの要求のように見えますが。 – Olaf

+0

ほとんどの(すべてではないが)イーサネットMACはハードウェアでFCSを生成します。しかし、一般的なコンピュータのユーザ空間プログラムは通常、リンク層のパケットを書き込むことができません。つまり、生のソケットはネットワーク層(IP)から始まります。したがって、あなたは組み込みシステムやこのタスクのためのいくつかのカーネルモジュールを持っていると仮定しています。適切なヘルプの質問に言及する必要があります。 –

答えて

0

FIXをありがとう:FCS計算が唯一のオプションであると思われる、私の代わりにIPチェックサム計算を追加し、DHCPが通過するために、それは十分でした。

ありがとうございました。

0

試してみてください。

#define BYTE unsigned char 
    int fcs(BYTE* paquete,int n){ 
     int byte,sum=0; 
     n++; 
     for(int j=0;j<=n;j++){ 
       byte=paquete[j]; 
       for(int i=0;i<8;i++){ 
         if(j!=n && i<7){ 
           sum = sum+(byte & 0x01); 
           byte = byte >> 1; 
         } 
       } 
     } 
     return sum; 
} 
関連する問題