私は、次の後に「バッファ」に格納されたデータ構造を把握しようとしている:C PF_PACKETリンク層処理
sock=socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_IP));
recvfrom(sock, buffer, 2048, 0, NULL, NULL);
私はなりたいですデータ構造を突き刺し、リンク層、IP層、およびTCP層がTCPパケットであればそれを読み取ることができます。私はマニュアルページといくつかのヘッダーファイルを試しましたが、ちょうどその場所にあります。
ありがとうございます。
私は男7のパケットを見ました。マニュアルページに基づいて、「リンクレベルヘッダー情報は、sockaddr_llの共通フォーマットで利用可能です。」と記載されています。 sockaddr_llを見ると、構造体にIPパケット全体を入れることができないことがわかります。 – Philoxopher
sockaddr_llにはパケット全体ではなく、リンクレベル*ヘッダ*情報だけが含まれています。他のデータはあなたのrecvバッファにあります。形式は、送信するプロトコルによって異なります。適切なプロトコルのRFCを見てください。 IP、TCPなど。 – mark4o
マニュアルページの一番上を見ると、#includeには、低レベルのパケットを定義するヘッダファイルがあります(ただし、構造体ではありませんが、定義しています)。 sockaddr_llは単にアドレスを定義します。 –