4

SYN パケットを作成し、生のソケットで送信する単純な C++ コードがあります。これには 54 バイトを割り当てます (イーサネット 14 バイト)。

送信側の Wireshark では 54 バイトが表示されますが、受信側の Wireshark では 60 バイトが表示されます。パケットの最後にトレーラとして 6 バイトが追加されます。

scapy でパケットを送信した場合も同じことが起こります。(送信側 54、受信側 60)

アドバイスをお願いできますか?

4

2 に答える 2

5

イーサネットは64バイトより短いフレームを送信できません。60バイトはペイロードで、4バイトはチェックサム(FCS)です。FCSはハードウェアによって取り除かれ、ソフトウェアによって認識されることはありません。そのため、アプリケーションには60バイトしか表示されません。

したがって、追加された余分なバイトはハードウェアによって追加され、それについてできることは何もありません。ただし、トレーラーはすべてゼロである必要があります。

Wiresharkのwikiには、これに関する優れた情報があります:http ://wiki.wireshark.org/Ethernet

于 2012-12-06T06:44:13.190 に答える
1

@Gille が述べたように、イーサネットの制限により、追加のデータはパディングされます。しかし、IP には「長さ」フィールドがあり、パケットのどのくらいが実際のペイロードで、どれくらいがパディングであるかがわかります。あなたのコード (およびそこにある適切なコード) はパディングを処理できる必要があり、それが「長さ」フィールドの目的です。

IPv4 を使用していると仮定して、これを見てください: http://en.wikipedia.org/wiki/IPv4#Packet_structure。「全長」フィールドについて話しています。

于 2012-12-06T11:05:27.857 に答える