1

rawソケットを使用してレシーバープログラムを作成したいのですが、recvfrom()を使用してパケットを受信するので、パケットのIPヘッダーとtcpヘッダーを確認します。

プログラムがパケットを送信するとき、ネットワークのバイト順序とホストのバイト順序の問題に注意を払いますが、私の受信プログラムでは、recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len);

パケット内のデータのバイト順序は何ですか?ネットワークバイトオーダーですか、それともホストバイトオーダーですか?そしてそれにどう対処するか?

この例の場合 http://www.binarytides.com/packet-sniffer-code-in-c-using-linux-sockets-bsd/

作成者は、受信したパケットを処理するときにバイト順序の問題を考慮していません。なぜですか?ありがとう!

4

1 に答える 1

1

パケット内のデータのバイト順序は何ですか?

慣例では、ネットワークの順序はビッグエンディアンの順序です。ただし、受信するデータは送信したデータです。エンディアンを変更するために「整数」を魔法のように変更する人は誰もいません。

そしてそれにどう対処するか?

  • 整数データを解釈するときに使用ntohlしますntohs
  • ビットフィールドのエンディアンは標準ではないことに注意してください

作成者は、受信したパケットを処理するときにバイト順序の問題を考慮していません。

あなたが投稿したリンクは、番組ntohsntohl電話を示しています。著者は、少なくともある程度はエンディアンを処理します。

于 2013-03-13T18:53:28.967 に答える